问题
在安源等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站设计、做网站 网站设计制作定制制作,公司网站建设,企业网站建设,成都品牌网站建设,全网整合营销推广,成都外贸网站建设,安源网站建设费用合理。
怎么样将 Asp.Net Web Api加入到Asp.Net Web From应用程序中
解决方案
在Visual Studio 2013中,创建新的 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 Studio 2012中使用也很简单,只要创建一个 WebForm项目,然后通过NuGet来安装 Web API就可以。
工作原理
和在MVC中使用 ASP.NET Web API一样,在 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 控制器
public class Book{ public int Id { get; set; } public string Author { get; set; } public string Title { get; set; } }public partial class _Default : Page{ protected void Page_Load(object sender, EventArgs e) { int id; if (Int32.TryParse((string)Page.RouteData.Values["id"], out id)) { var book = 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; } }public class BooksController : ApiController{ public Book GetById(int id) { var book = Books.List.FirstOrDefault(x => x.Id == id); if (book == null) throw new HttpResponseException(HttpStatusCode.NotFound); return book; } }
这是一个约定,在解决方案的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 路由
public static class RouteConfig{ public static void RegisterRoutes(RouteCollection routes) { var settings = new FriendlyUrlSettings(); settings.AutoRedirectMode = RedirectMode.Permanent; routes.EnableFriendlyUrls(settings); routes.MapPageRoute( "book-route", "book/{id}", "~/default.aspx"); } }public static class WebApiConfig{ public static void Register(HttpConfiguration config) { // Web API configuration and services // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }