您好,登錄后才能下訂單哦!
問題
怎么樣將 Asp.Net Web Api 加入到 Asp.Net Web From 應(yīng)用程序中
解決方案
在 Visual Studio 2013 中,創(chuàng)建新的 Web From,可以直接在"新建 ASP.NET 項目" 創(chuàng)建項目向?qū)е?,勾選 ASP.NET Web API ,將其加入進(jìn)來。如圖 1-2 所示。
圖 1-2. 在Asp.NET 項目向?qū)В?/span>同時選中 Web Form 和 Web API
因為可以通過 NuGet 添加 ASP.NET Web API ,所以使用“Install-Package Microsoft.AspNet.WebApi”就可以輕易將其添加到現(xiàn)有的 Web Form 解決方案中。
在 Visual Studio 2012 中使用也很簡單,只要創(chuàng)建一個 WebForm 項目,然后通過NuGet 來安裝 Web API 就可以。
工作原理
和在 MVC 中使用 ASP.NET Web API 一樣,在 Web Form 項目中ASP.NET Web API 使用 的結(jié)果就是,Web API 和 Web Form 應(yīng)用程序運行在同一個 ASP.NET 進(jìn)程中。
在 ASP.NET 項目中安裝 Microsoft.AspNet.WebApi NuGet 包時,會在 App_Start文件夾中添加 WebApiConfig 的 靜態(tài)類。這個文件是用來配置 ASP.NET Web API 和定義 ASP.NET Web API 路由。
另外,在 Global.asax 中的 Application_Start 可以找到被添加的代碼,就像下面的代碼片段,調(diào)用 Web API 配置。
GlobalConfiguration.Configure(WebApiConfig.Register);
Web API 運行在 Web Form 應(yīng)用程序中與 運行在 MVC 應(yīng)用程序中沒什么不同。每個請求仍將被相關(guān)的 IHttpHandler 處理??赡苁怯糜谔幚?/span> Web API 的 HttpControllerHandler 或者是用于處理 Web Form 的處理器。Web Form 相關(guān)的 ASPX 擴(kuò)展名會交給 PageHandlerFactory,依次調(diào)用相關(guān)的 IHttpHandler 來處理 HTTP 請求。System.Web.UI.Page 類是 Web Form 應(yīng)用程序的默認(rèn)組成部分,也是一個 IHttpHandler,其實他才是請求處理器的真正執(zhí)行者。
代碼演示
清單 1-5 展示了一個簡單的模型類,這個模型是ApiController 和 Web Form 頁展示數(shù)據(jù)的共享類。
清單 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,但是,這并不意味著這是強制要求;在當(dāng)前應(yīng)用程序中,只要被聲明為 public 的類,類名以Controller 為后綴的 IHttpController 實現(xiàn)類,都會被運行時發(fā)現(xiàn),也會被當(dāng)成一個可以處理的 HTTP 請求。
就像 Web API 和 MVC 一塊兒運行一樣,當(dāng)使用 Web Form 路由,我們也必須留心那些要被 Web API 處理的路由和那些要導(dǎo)向 ASPX 頁面之間引起的沖突。列表 1-6 展示了 Web Form 和 Web API的簡單路由設(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 } ); } }
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。