[ASP.NET MVC 4 Beta] 新增功能介紹(1) [Web API]

  • 20099
  • 0
  • MVC
  • 2012-03-26

什麼 Web API 呢?所謂的 Web API 其實就是一種建立在 RESTful 服務基礎上的平台,當然一定是走 HTTP 的協定。當您建立好一個空的 Web API 的 MVC 專案後,在 Controller 中你會發現一個新的類別 ApiController

ASP.NET MVC 4 終於在 2012/2/15 前進到 Beta 版了,在 Beta 中 [範本] 又多了兩個新的成員:Web API 、Single Page Application,如下畫面:

image

而在 Web API 與 Single Page Application 之中,目前 View 只支援 Razor 語法。什麼 Web API 呢?所謂的 Web API 其實就是一種建立在 RESTful 服務基礎上的平台,當然一定是走 HTTP 的協定。當您建立好一個空的 Web API 的 MVC 專案後,在 Controller 中你會發現一個新的類別 ApiController,預設,它 (很範例的) 先幫你實作了 Get(), Post(), Put(), Delete() 等方法,其中 Get() 有一個是 Overloading 傳回 IEnumerable<T> 的方法,這也是 Web API 最主要也是最強大的特性之一,強行別的 HttpWebRequest。空的專案幫你建立好的 ApiController 程式碼如下:

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Linq;
   4:  using System.Net.Http;
   5:  using System.Web.Http;
   6:  
   7:  namespace MvcWebAPIApplication1.Controllers
   8:  {
   9:      public class ValuesController : ApiController
  10:      {
  11:          // GET /api/values
  12:          public IEnumerable<string> Get()
  13:          {
  14:              return new string[] { "value1", "value2" };
  15:          }
  16:  
  17:          // GET /api/values/5
  18:          public string Get(int id)
  19:          {
  20:              return "value";
  21:          }
  22:  
  23:          // POST /api/values
  24:          public void Post(string value)
  25:          {
  26:          }
  27:  
  28:          // PUT /api/values/5
  29:          public void Put(int id, string value)
  30:          {
  31:          }
  32:  
  33:          // DELETE /api/values/5
  34:          public void Delete(int id)
  35:          {
  36:          }
  37:      }
  38:  }

 

在 Global.asax.cs 中在 routes 多了一個 MapHttpRoute() 的擴充方法,多註冊了 "api/{controller}/{id}" 的這個路徑

image

眼尖的人應該會發現在 Application_Start() 的地方多了一行 BundleTable.Bundles.RegisterTemplateBundles() 它也是MVC 新的特性之一,不過他主要補助於 Web API 在HTTP 中傳輸 JavaScript 或 CSS 的時候,它會幫您一除掉一些不必要 [字元] 與 [空白] 以及一些最佳化的工作以提升傳輸效率。

它另一個特性就是它是可以獨立出來,掛入 Win32Services 或 Console 應用程式中,獨立的提供 Web API 服務。在這一版的 MVC 中另外新增了 HttpHostSelfConfiguration 類別來完成服務的公開。如果你建立一個 Console Application 專案,並撰寫如下程式便可以將你的 ApiController 公開出來,如下:

   1:             var config = new HttpSelfHostConfiguration("http://localhost:8080"); 
   2:              config.Routes.MapHttpRoute(
   3:                  "API Default", "api/{controller}/{id}",
   4:                  new { id = RouteParameter.Optional });
   5:              using (HttpSelfHostServer server = new HttpSelfHostServer(config)) 
   6:              { 
   7:                  server.OpenAsync().Wait(); 
   8:                  Console.WriteLine("Press Enter to quit."); 
   9:                  Console.ReadLine(); 
  10:              }

 

 

既然是可以獨立出來,表示你可以獨立的存取它,你可以試試開另一個瀏覽器,輸入 http://localhost:7777/api/Values/1 的URL,在我們前面的 MvcWebApiApplication1  專案中應該可以取得 Get(id) 方法傳回的 "value"字串:

image

 

最後整理:

在 ASP.NET Web API 中共有以下幾個特性:

Modern HTTP programming model:

最強大的功能之一,前面提到過,它可以在 HttpWebRequest 中公開強行別的資料

Full support for routes:

它也是 Route 基礎下,因此支援 MVC 所有功能,如 [HttpPost] 等 Attributes 。

Content negotiation:

它的 Client 與 Server 使用共同的 API 與資料格式,預設支援 JSON、XML 等。當然您也可以在這個基礎上開發自己的資料傳輸格式。

Model binding and validation:

在模型繫結中使用強行別 HttpWebRequest 的資料,使用上更容易。

Filters: 如同 MVC 基本功能一樣,支援動作、驗證的過濾等動作,以及錯誤處理的部分。

Query composition:

它可公開如 IQueryable<T> 可查詢的介面。也支援 OData 協定。

Improved testability of HTTP details:

在這個平台上,HTTP的行細資訊、Context 物件等動作,現在多了HttpRequestMessage 與 HttpResponseMessage 這兩個執行個體物件。就是透過它使您可以在 HttpWebRequest 中傳遞自定的型別。

Improved Inversion of Control (IoC) via DependencyResolver:

如同 MVC 的架構上,你很容易實現 IoC 的設計模式。

Code-based configuration:

設定 Web API 的相關功能只要使用幾行 Code 就可以了,不需要修改任何 Configuration 檔案的內容。

Self-host: 前面有提到過了,Web API 的服務的部分是允許獨立出來進行服務的。稱為 Self-Host。

 

相關參考資料:

ASP.NET MVC 4 Beta

http://www.asp.net/mvc/mvc4

Getting Started with ASP.NET Web API

http://www.asp.net/web-api

Introducing ASP.NET MVC 4 Beta with Web APIs

http://blogs.msdn.com/b/carlosfigueira/archive/2012/02/16/introducing-asp-net-mvc-4-beta-with-web-apis.aspx

Bundling and Minification in ASP.NET MVC 4

http://www.dotnetexpertguide.com/2011/12/bundling-and-minification-aspnet-mvc4.html

Self-Host a Web API (C#)

http://www.asp.net/web-api/overview/hosting-aspnet-web-api/self-host-a-web-api


 

簽名:

學習是一趟奇妙的旅程

這當中,有辛苦、有心酸、也有成果。有時也會有瓶頸。要能夠繼續勇往直前就必須保有一顆最熱誠的心。

軟體開發之路(FB 社團)https://www.facebook.com/groups/361804473860062/

Gelis 程式設計訓練營(粉絲團)https://www.facebook.com/gelis.dev.learning/


 

如果文章對您有用,幫我點一下讚,或是點一下『我要推薦,這會讓我更有動力的為各位讀者撰寫下一篇文章。

非常謝謝各位的支持與愛護,小弟在此位各位說聲謝謝!!! ^_^