您好,登錄后才能下訂單哦!
問題
怎么樣將 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 } ); } }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。