程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> [水煮 ASP.NET Web API2 方法論](1-2)在 WebForm 應用程序中添加 ASP.NET Web API,api2webform

[水煮 ASP.NET Web API2 方法論](1-2)在 WebForm 應用程序中添加 ASP.NET Web API,api2webform

編輯:關於.NET

[水煮 ASP.NET Web API2 方法論](1-2)在 WebForm 應用程序中添加 ASP.NET Web API,api2webform


問題

  怎麼樣將 Asp.Net Web Api 加入到 Asp.Net Web From 應用程序中

 

解決方案

  在 Visual Studio 2013 中,創建新的 Web From,可以直接在"新建 ASP.NET 項目" 創建項目向導中,勾選ASP.NET Web API ,將其加入進來。如圖 1-2 所示。

 

 wKiom1gZ-CnSlNf0AACOJzJ-fnk328.png-wh_50

 

圖 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配置。

1 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 控制器

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 public class Book{     public int Id { getset; }     public string Author { getset; }     public string Title { getset; } }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 == nullthrow 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 路由

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 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 }         );     } }

博客園:http://www.cnblogs.com/shuizhucode/

51 CTO:http://shuizhucode.blog.51cto.com/

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved