[水煮 ASP.NET Web API2 方法论](1-2)在 WebForm 应用程序中添加 ASP.NET Web API
问题
怎么样将 Asp.Net Web Api 加入到 Asp.Net Web From 应用程序中
解决方案
在 Visual Studio2013 中,创建新的 Web From,可以直接在"新建 ASP.NET 项目" 创建项目向导中,勾选 ASP.NET Web API ,将其加入进来。如图 1-2 所示。
图 1-2. 在Asp.NET项目向导,同时选中 Web Form 和 Web API
因为可以通过 NuGet 添加 ASP.NET Web API ,所以使用“Install-Package Microsoft.AspNet.WebApi”就可以轻易将其添加到现有的 Web Form 解决方案中。
在 Visual Studio2012 中使用也很简单,只要创建一个 WebForm 项目,然后通过NuGet 来安装 Web API 就可以。
工作原理
和在 MVC 中使用 ASP.NET WebAPI 一样,在 Web Form 项目中ASP.NET Web API 使用 的结果就是,Web API 和 Web Form 应用程序运行在同一个 ASP.NET 进程中。
在 ASP.NET 项目中安装 Microsoft.AspNet.WebApi NuGet 包时,会在 App_Start文件夹中添加 WebApiConfig 的 静态类。这个文件是用来配置 ASP.NET Web API 和定义 ASP.NET Web API 路由。
另外,在 Global.asax 中的 Application_Start 可以找到被添加的代码,就像下面的代码片段,调用 Web API 配置。
GlobalConfiguration.Configure(WebApiConfig.Register);
Web API 运行在 Web Form 应用程序中与 运行在 MVC 应用程序中没什么不同。每个请求仍将被相关的 IHttpHandler 处理。可能是用于处理 Web API 的 HttpControllerHandler 或者是用于处理 Web Form 的处理器。Web Form 相关的 ASPX 扩展名会交给 PageHandlerFactory,依次调用相关的 IHttpHandler 来处理 HTTP 请求。System.Web.UI.Page 类是 Web Form 应用程序的默认组成部分,也是一个 IHttpHandler,其实他才是请求处理器的真正执行者。
代码演示
清单 1-5 展示了一个简单的模型类,这个模型是ApiController 和 Web Form 页展示数据的共享类。
清单 1-5. 简单模型,Web Form 页,和 Web API控制器
publicclassBook{publicintId{get;set;}publicstringAuthor{get;set;}publicstringTitle{get;set;}}publicpartialclass_Default:Page{protectedvoidPage_Load(objectsender,EventArgse){intid;if(Int32.TryParse((string)Page.RouteData.Values["id"],outid)){varbook=Books.List.FirstOrDefault(x=>x.Id==id);if(book==null){Response.StatusCode=404;return;}ltlAuthor.Text=book.Author;ltlTitle.Text=book.Title;hplLink.NavigateUrl="/api/books/"+book.Id;}Response.StatusCode=404;}}publicclassBooksController:ApiController{publicBookGetById(intid){varbook=Books.List.FirstOrDefault(x=>x.Id==id);if(book==null)thrownewHttpResponseException(HttpStatusCode.NotFound);returnbook;}}
这是一个约定,在解决方案的 Cotrollers 文件夹中放 ApiController,但是,这并不意味着这是强制要求;在当前应用程序中,只要被声明为 public 的类,类名以Controller 为后缀的 IHttpController 实现类,都会被运行时发现,也会被当成一个可以处理的 HTTP 请求。
就像 Web API 和 MVC 一块儿运行一样,当使用 Web Form 路由,我们也必须留心那些要被 Web API 处理的路由和那些要导向 ASPX 页面之间引起的冲突。列表 1-6 展示了 Web Form 和 Web API的简单路由设置。ASP.NET Web API 路由是在 WebApiConfig 的静态类中设置的,然而,Web Form 路由是在RouteConfig 静态类中设置的。
列表 1-6. Web API 路由和 Web Form 路由
publicstaticclassRouteConfig{publicstaticvoidRegisterRoutes(RouteCollectionroutes){varsettings=newFriendlyUrlSettings();settings.AutoRedirectMode=RedirectMode.Permanent;routes.EnableFriendlyUrls(settings);routes.MapPageRoute("book-route","book/{id}","~/default.aspx");}}publicstaticclassWebApiConfig{publicstaticvoidRegister(HttpConfigurationconfig){//WebAPIconfigurationandservices//WebAPIroutesconfig.MapHttpAttributeRoutes();config.Routes.MapHttpRoute(name:"DefaultApi",routeTemplate:"api/{controller}/{id}",defaults:new{id=RouteParameter.Optional});}}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。