問題
在安源等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作定制制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),全網(wǎng)整合營(yíng)銷推廣,成都外貿(mào)網(wǎng)站建設(shè),安源網(wǎng)站建設(shè)費(fèi)用合理。
怎么樣將 Asp.Net Web Api加入到Asp.Net Web From應(yīng)用程序中
解決方案
在Visual Studio 2013中,創(chuàng)建新的 Web From,可以直接在"新建 ASP.NET項(xiàng)目"創(chuàng)建項(xiàng)目向?qū)е?,勾選 ASP.NET Web API,將其加入進(jìn)來(lái)。如圖 1-2所示。
圖 1-2.在Asp.NET 項(xiàng)目向?qū)?,同時(shí)選中 Web Form和 Web API
因?yàn)榭梢酝ㄟ^ NuGet添加 ASP.NET Web API,所以使用“Install-Package Microsoft.AspNet.WebApi”就可以輕易將其添加到現(xiàn)有的 Web Form解決方案中。
在Visual Studio 2012中使用也很簡(jiǎn)單,只要?jiǎng)?chuàng)建一個(gè) WebForm項(xiàng)目,然后通過NuGet來(lái)安裝 Web API就可以。
工作原理
和在MVC中使用 ASP.NET Web API一樣,在 Web Form項(xiàng)目中ASP.NET Web API使用的結(jié)果就是,Web API和 Web Form應(yīng)用程序運(yùn)行在同一個(gè) ASP.NET進(jìn)程中。
在 ASP.NET項(xiàng)目中安裝 Microsoft.AspNet.WebApi NuGet包時(shí),會(huì)在App_Start文件夾中添加 WebApiConfig的靜態(tài)類。這個(gè)文件是用來(lái)配置 ASP.NET Web API和定義 ASP.NET Web API路由。
另外,在Global.asax中的 Application_Start可以找到被添加的代碼,就像下面的代碼片段,調(diào)用Web API配置。
GlobalConfiguration.Configure(WebApiConfig.Register);
Web API運(yùn)行在 Web Form應(yīng)用程序中與運(yùn)行在 MVC應(yīng)用程序中沒什么不同。每個(gè)請(qǐng)求仍將被相關(guān)的 IHttpHandler處理??赡苁怯糜谔幚?Web API的 HttpControllerHandler或者是用于處理 Web Form的處理器。Web Form相關(guān)的 ASPX擴(kuò)展名會(huì)交給 PageHandlerFactory,依次調(diào)用相關(guān)的 IHttpHandler來(lái)處理 HTTP請(qǐng)求。System.Web.UI.Page類是 Web Form應(yīng)用程序的默認(rèn)組成部分,也是一個(gè) IHttpHandler,其實(shí)他才是請(qǐng)求處理器的真正執(zhí)行者。
代碼演示
清單1-5展示了一個(gè)簡(jiǎn)單的模型類,這個(gè)模型是ApiController和 Web Form頁(yè)展示數(shù)據(jù)的共享類。
清單 1-5. 簡(jiǎn)單模型,Web Form 頁(yè),和 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; } }
這是一個(gè)約定,在解決方案的Cotrollers文件夾中放 ApiController,但是,這并不意味著這是強(qiáng)制要求;在當(dāng)前應(yīng)用程序中,只要被聲明為 public的類,類名以Controller為后綴的 IHttpController實(shí)現(xiàn)類,都會(huì)被運(yùn)行時(shí)發(fā)現(xiàn),也會(huì)被當(dāng)成一個(gè)可以處理的 HTTP請(qǐng)求。
就像Web API和 MVC一塊兒運(yùn)行一樣,當(dāng)使用 Web Form路由,我們也必須留心那些要被 Web API處理的路由和那些要導(dǎo)向 ASPX頁(yè)面之間引起的沖突。列表 1-6展示了 Web Form和 Web API的簡(jiǎn)單路由設(shè)置。ASP.NET Web API路由是在 WebApiConfig的靜態(tài)類中設(shè)置的,然而,Web Form路由是在RouteConfig靜態(tài)類中設(shè)置的。
列表 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 } ); } }