Sample code used in TechEd NZ 2012 WebApi Session
DEV313 - WebApi - Know It, Learn It, Love It Code Sample - TechEd NZ - 2012 Author: Grant Archibald
Licence see Licence.txt
NOTE: This solution uses NuGet package restore (see http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages)
Steps Involved:
-
Create Model Members.cs (Code First Entity Framework Data Model)
-
Create Folder DAL
-
Create TechEdContext.cs (Optionally set connection string in contructor)
-
Create TechEdInit.cs
-
Register Database.SetInitializer in Global.asax.cs
-
Compile Solution to build Model
-
Right Click - Add controller MembersController.cs
a) Choose Models.Members and TechExContext
NOTE: This default controller will be updated to add i) OData [Queryable] ii) AutoMapper to limit data sent to/from the consumers
Help Pages
-
Install-Package Microsoft.AspNet.WebApi.HelpPage -pre
-
See http://bit.ly/webapi-help for Video Demo
OData Support
-
Install-Package Microsoft.AspNet.WebApi.OData -pre
-
Register OData routes in WebApiConfig.cs in App_Start
-
Add [Queryable] to GetMembers in MembersController
-
See http://bit.ly/webapi-odata for more information
Security
-
Install-Package Thinktecture.IdentityModel
-
Add SecurityException Filter e.g. SecurityResources.cs in App_Start
-
Add SecurityConfig.cs in AppStart
-
Register Security in Global.asax.cs e.g. SecurityConfig.ConfigureGlobal
-
See http://bit.ly/webapi-security on how to secure WebApi
NOTES: The default security config accepts username == password You will need to change to another method e.g. MembershipProvider
Extended Members Controller
-
Install-Package AutoMapper
-
Add extra project with ServiceModels
(see TechEd.Integration)
-
Reference TechEd.Integration
-
Register AutoMapper to/from domain model e.g.
AutoMapper.Mapper.CreateMap<Models.Member, TechEd.Integration.ServiceModels.Member>(); AutoMapper.Mapper.CreateMap<TechEd.Integration.ServiceModels.Member, Models.Member>();
-
Change MembersController.cs to reference TechEd.Integration.ServiceModels
-
Change MembersController to map to/from domain model
-
Change Queryable to use ODataQueryOptions
-
Make use of using OData.Framework; defined in ODataExtensions.cs for extra parsing of OData queries