如果您喜歡該項目,請點擊。請求請求受到高度讚賞。關注我@kansiris87 以獲取技術更新。
| 不。 | 問題 |
|---|---|
| 1 | [什麼是 REST? |
| 2 | [解釋一下REST原理? |
| 3 | [REST 和 SOAP 有什麼不同 ](#REST 和 SOAP 有什麼不同?) |
| 4 | [什麼是 ASP.NET WEB API? ](#什麼是 ASP.NET WEB API?) |
| 5 | [為什麼選擇 ASP.NET WEB API? ](#為什麼選擇 ASP.NET WEB API?) |
| 6 | [WCF 和 ASP.NET WEB API 以及 WCF REST 和 Web Service 之間有什麼區別? ](#WCF 和 ASP.NET WEB API 以及 WCF REST 和 Web Service 之間有什麼區別?) |
| 7 | [WCF 和 WEB API 選哪一個? ](#WCF 和 WEB API 選哪一個?) |
| 8 | [ASP.NET MVC 和 ASP.NET WEB API 有什麼不同? ](#HASP.NET MVC 和 ASP.NET WEB API 有什麼不同?) |
| 9 | [可以使用WEB API方式回傳視圖嗎? ](#可以使用WEB API方式回傳視圖嗎?) |
| 10 | [您可以像 ASP.NET MVC 一樣更改 WEB API 操作名稱嗎? |
|1 | [是否可以限制 WEB API 操作方法僅透過 HTTP GET、POST、PUT 或 DELETE 呼叫? ](#是否可以限制 WEB API 操作方法僅透過 HTTP GET、POST、PUT 或 DELETE 呼叫?)| |2 | [如何在ASP.NET MVC中呼叫WEB API? ](#如何在ASP.NET MVC中呼叫WEB API?)| |3 | [ASP.NET API 路由與 ASP.NET MVC 路由有何不同? ](#ASP.NET API 路由與 ASP.NET MVC 路由有何不同?)| |4 | [如何在 ASP.NET WEB API2 中啟用屬性路由? ](#如何在 ASP.NET WEB API2 中啟用屬性路由?)| |5 | [如何在 ASP.NET WEB API2 中定義屬性路由? ](#如何在 ASP.NET WEB API2 中定義屬性路由?)|
REST 代表表述性狀態轉移。這是一種用於在分散式環境中交換資料的協定。 REST 是一種架構風格,它將每個服務視為一種資源,並透過 HTTP 協定方法(如 GET、POST、PUT 和 DELETE)存取資料。
REST 風格的架構由客戶端和伺服器組成。客戶端向伺服器發起請求,伺服器處理這些請求並根據這些請求回傳回應。這些請求和回應是圍繞這些資源的表示的傳輸所建構的。
REST 是一組原則,定義如何使用 Web 標準(例如 HTTP 和 URI)。有五個重要的 REST 原則如下:
可尋址資源 - 每個資源應由 URI(唯一識別碼)標識
簡單且統一的介面 - REST 基於 HTTP 協議,因此使用 HTTP GET、POST、PUT 和 DELETE 方法來執行操作。這使得 REST 變得簡單且統一。
面向表徵-交換資源的表徵。 GET 用於傳回表示,而 PUT、POST 將表示傳遞到伺服器,以便底層資源可能發生變更。表示可以採用多種格式,例如 XML、JSON 等。
無狀態通訊 - 應用程式可能有狀態,但伺服器上沒有儲存客戶端會話資料。任何會話特定資料應由客戶端保存和維護,並根據需要隨每個請求傳輸到伺服器。
可緩存 - 客戶端應該能夠緩存回應以供進一步使用。
REST 和 SOAP 之間的差異如下: SOAP REST SOAP 代表簡單物件存取協定 REST 代表表述性狀態傳輸。它是一種基於 XML 的協議,建構在 HTTP 或有時是 TCP/IP、SMTP 之上。 REST 不是一種協議,而是一種架構風格,即基於資源的架構。 SOAP 具有無狀態且有狀態實現的規格。 REST 是完全無狀態的。 SOAP 強制訊息格式為 XML。 REST 不強制將訊息格式設定為 XML 或 JSON。 SOAP有一個明確的標準規範。它沒有明確的標準規範。 SOAP 訊息由一個信封組成,其中包含 SOAP 標頭和用於儲存要傳送的實際資訊的正文。 REST 使用 HTTP 內建標頭(具有各種媒體類型)來攜帶元訊息,並使用 GET、POST、PUT 和 DELETE 動詞來執行 CRUD 操作。 SOAP 使用介面和命名操作來公開您的服務。 REST 使用 URI 和方法(GET、PUT、POST、DELETE)來公開資源。與 REST 相比,效能較慢。與 SOAP 相比,REST 速度更快。
ASP.NET WEB API 是一個用於建立 HTTP 服務的框架,可供多種用戶端(包括瀏覽器、手機、iPhone 和平板電腦)使用。它與 ASP.NET MVC 非常相似,因為它包含 MVC 功能,例如路由、控制器、操作結果、過濾器、模型綁定器、IOC 容器或依賴項注入。但它不是 MVC 框架的一部分。它是核心 ASP.NET 平台的一部分,可與 MVC 和其他類型的 Web 應用程式(例如 ASP.NET WebForms)一起使用。它也可以用作獨立的 Web 服務應用程式。 ASP.NET WEB API 功能 1. 它支援基於約定的 CRUD 操作,因為它與 HTTP 動詞 GET、POST、PUT 和 DELETE 搭配使用。 2. 回應具有 Accept 標頭和 HTTP 狀態代碼。 3. 回應由 WEB API 的 MediaTypeFormatter 格式化為 JSON、XML 或您想要新增為 MediaTypeFormatter 的任何格式。 4. 它可以接受並產生可能不是物件導向的內容,如影像、PDF 檔案等。因此,透過將新的 [Queryable] 屬性放置在傳回 IQueryable 的控制器方法上,用戶端可以使用該方法進行 OData 查詢組合。 6. 它可以託管在應用程式中或 IIS 上。 7. 它還支援 MVC 功能,例如路由、控制器、操作結果、過濾器、模型綁定器、IOC 容器或依賴項注入,使其更加簡單和健壯。
如今,基於網路的應用程式不足以吸引其客戶。人們非常聰明,他們在日常生活中使用 iPhone、手機、平板電腦等設備。這些設備還擁有許多讓生活變得輕鬆的應用程式。事實上,我們正在從網路走向應用程式世界。
因此,如果您想以快速簡單的方式將服務資料公開給瀏覽器以及所有這些現代設備應用程序,您應該擁有一個與瀏覽器和所有這些設備相容的 API。
例如用於網頁應用程式和電話應用程式的 twitter、facebook 和 Google API。
WEB API 是向不同裝置公開資料和服務的絕佳框架。此外,WEB API 是開源的,是透過 .NET Framework 建立 REST 式服務的理想平台。與WCF Rest 服務不同,它使用HTTP 的完整功能(如URI、請求/回應標頭、快取、版本控制、各種內容格式),並且與WCF Rest 服務不同,您不需要為不同裝置定義任何額外的配置設定。
如果我們需要Web Service而不需要SOAP,那麼ASP.NET WEB API就是最好的選擇。
它用於在現有 WCF 訊息管道之上建立簡單的、非基於 SOAP 的 HTTP 服務。
它沒有像 WCF REST 服務那樣繁瑣且廣泛的配置。
使用 WEB API 輕鬆建立服務。使用 WCF REST 服務,建立服務很困難。
它僅基於 HTTP,並且易於以 REST-ful 方式定義、公開和使用。
它是輕量級架構,適合智慧型手機等頻寬有限的設備。
它是開源的。
.NET 框架擁有許多可讓您建立 HTTP 服務的技術,例如 Web 服務、WCF 和現在的 WEB API。這四者之間有以下區別:
網路服務
它基於 SOAP 並以 XML 形式傳回資料。
它僅支援 HTTP 協定。
它不是開源的,但任何理解 xml 的客戶端都可以使用。
它只能託管在 IIS 上。
世界碳纖維
它也是基於 SOAP 並以 XML 形式傳回資料。
它是 Web 服務 (ASMX) 的演變,支援 TCP、HTTP、HTTPS、命名管道、MSMQ 等各種協定。
WCF 的主要問題是其繁瑣且廣泛的配置。
它不是開源的,但任何理解 xml 的客戶端都可以使用。
它可以託管在應用程式或 IIS 上或使用視窗服務。
WCF休息
若要將 WCF 用作 WCF Rest 服務,您必須啟用 webHttpBindings。
它分別透過 [WebGet] 和 [WebInvoke] 屬性來支援 HTTP GET 和 POST 動詞。
若要啟用其他 HTTP 動詞,您必須在 IIS 中進行一些配置,以接受 .svc 檔案上特定動詞的請求
使用 WebGet 透過參數傳遞資料需要配置。必須指定 UriTemplate
它支援XML、JSON和ATOM資料格式。
網路應用程式介面
這是一個以簡單的方式建構 HTTP 服務的新框架。
WEB API 是開源的,是透過 .NET Framework 建立 REST 式服務的理想平台。
與 WCF Rest 服務不同,它使用 HTTP 的完整功能(如 URI、請求/回應標頭、快取、版本控制、各種內容格式)
它還支援 MVC 功能,例如路由、控制器、操作結果、過濾器、模型綁定器、IOC 容器或依賴項注入、單元測試,使其更加簡單和健壯。
它可以託管在應用程式中或 IIS 上。
它是輕量級架構,適合智慧型手機等頻寬有限的設備。
回應由 WEB API 的 MediaTypeFormatter 格式化為 JSON、XML 或您想要新增為 MediaTypeFormatter 的任何格式。
以下幾點可協助您在 WCF 和 WEB API 之間進行選擇:
當您想要建立一項支援特殊情境(例如單向訊息傳遞、訊息佇列、雙工通訊等)的服務時,請選擇 WCF。
當您想要建立一個可以使用可用的快速傳輸通道(例如TCP、命名管道,甚至UDP(在WCF 4.5 中))的服務,並且您還希望在所有其他傳輸通道不可用時支援HTTP 時,請選擇WCF 。
當您想要透過 HTTP 建立資源導向的服務並且可以使用 HTTP 的全部功能(例如 URI、請求/回應標頭、快取、版本控制、各種內容格式)時,請選擇 WEB API。
當您想要向廣泛的用戶端(包括瀏覽器、手機、iPhone 和平板電腦)公開您的服務時,請選擇 WEB API。
ASP.NET MVC 與 WEB API 之間有以下差異:
ASP.NET MVC 用於建立同時返回視圖和資料的 Web 應用程序,而 ASP.NET WEB API 用於建立完整的 HTTP 服務,其方式簡單且僅返回資料而不返回視圖。
WEB API 有助於在 .NET Framework 上建立 REST-ful 服務,並且還支援內容協商(這是關於確定客戶端可以接受的最佳回應格式資料。它可以是 JSON、XML、ATOM 或其他格式的數據),自託管,不屬於MVC。
WEB API 還負責傳回特定格式的數據,例如 JSON、XML 或基於請求中的 Accept 標頭的任何其他格式,您不必擔心這一點。 MVC 僅使用 JsonResult 傳回 JSON 格式的資料。
在 WEB API 中,請求根據 HTTP 動詞對應到操作,但在 MVC 中,它會對應到操作名稱。
ASP.NET WEB API 是新的框架,也是核心 ASP.NET 框架的一部分。 WEB API 中存在的模型綁定、過濾器、路由和其他 MVC 功能與 MVC 不同,存在於新的 System.Web.Http 程式集中。在 MVC 中,這些功能存在於 System.Web.Mvc 中。因此,WEB API 也可以與 ASP.NET 一起使用並作為獨立的服務層。
您可以在單一專案中混合 WEB API 和 MVC 控制器來處理進階 AJAX 請求,這些請求可能會傳回 JSON、XML 或任何其他格式的資料並建立完整的 HTTP 服務。通常,這稱為 WEB API 自託管。
當您混合使用 MVC 和 WEB API 控制器並且想要實現授權時,您必須建立兩個過濾器,一個用於 MVC,另一個用於 WEB API,因為兩者是不同的。
此外,WEB API是輕量級架構,除了Web應用程式之外,它還可以與智慧型手機應用程式一起使用。
與 ASP.NET MVC 不同,WEB API 僅用於傳回資料。資料可以是字串、JSON、XML、文字等。
與 ASP.NET MVC 一樣,您也可以使用 ActionName 屬性變更 WEB API 操作名稱,如下所示:
[HttpGet] [ActionName("GetProducts")] public IEnumerable ProductList() { return db.Products.AsEnumerable(); }
與 ASP.NET MVC 一樣,您也可以透過套用 HttpGet 或 HttpPost 或 HttpPut 或 HttpDelete 屬性來限制 WEB API 操作方法僅由特定 HTTP 請求呼叫。
如果您只想限制 HTTP Get 請求的操作方法,請使用 HttpGet 操作方法選擇器屬性對其進行修飾,如下所示:
[HttpGet] public IEnumerable ProductList() { return db.Products.AsEnumerable(); }
可以使用HttpClient和WEB API位址呼叫ASP.NET WEB API,如下所示:
公用類別 ProductController : 控制器 { HttpClient Client = new HttpClient(); Uri BaseAddress = new Uri("http://localhost:131/");公共 ActionResult Index() { Client.BaseAddress = BaseAddress; HttpResponseMessage 回應 = Client.GetAsync("productservice/GetProducts").Result; if (response.IsSuccessStatusCode) { var data = response.Content.ReadAsAsync<IEnumerable>().Result;返回視圖(資料);返回視圖(); } }
ASP.NET MVC 和 ASP.NET WEB API 都使用路由來監視傳入請求,並且至少定義一個路由才能發揮作用。這兩種路由的差異如下:
在 WEB API 路由模式中,{action} 參數是可選的,但您可以包含 {action} 參數。在 ASP.NET MVC 中,{action} 參數是必要的。
API 控制器中定義的操作方法必須具有 HTTP 操作動詞(GET、POST、PUT、DELETE)屬性,或具有 HTTP 操作動詞之一作為操作方法名稱的前綴。在 ASP.NET MVC 中,預設情況下,可以透過 HTTP GET 或 POST 動詞呼叫操作方法,並且要使用其他 HTTP 動詞,您需要將其定義為屬性。
與 ASP.NET MVC 不同,Web API 只能接收一種複雜型別作為參數。
在 ASP.NET WEB API2 中啟用屬性路由很簡單,只需在 WebApiConfig.cs 檔案的 Register() 方法中新增對 MapHttpAttributeRoutes() 方法的呼叫即可。
public static class WebApiConfig { public static void Register(HttpConfiguration config) { //啟用屬性路由 config.MapHttpAttributeRoutes(); } }
您也可以將屬性路由與基於約定的路由結合。
公共靜態類別 WebApiConfig { 公共靜態 void Register(HttpConfiguration config) {
//啟用屬性路由 config.MapHttpAttributeRoutes(); // 基於約定的路由。 config.Routes.MapHttpRoute( name: "DefaultApi",
RouteTemplate: "api/{controller}/{id}", 預設值: new { id = RouteParameter.Optional });
} }
與 ASP.NET MVC5 一樣,您也可以在 WEB API2 中在控制器層級和操作層級定義屬性路由,如下所示:
[RoutePrefix("Service/User")] public class UserController : ApiController { //GET 路由:api/User public IEnumerable Get() { return new string[] { "value1", "value2" };
}
[Route("{id}")] //GET 路由:Service/User/1 public string Get(int id) { return "value"; }
[Route("")] //POST 路由:服務/使用者/ public void Post([FromBody]string value) { } }
• 操作等級路由- 您可以在操作層級定義路由,套用於控制器中的特定操作。
public class UserController : ApiController { //GET 路由: api/User
public IEnumerable Get() { return new string[] { "value1", "value2" };
}
[Route("Service/User/{id}")] //GET 路由:Service/User/1 public string Get(int id) { return "value"; } [Route("Service/User/")] //POST 路由:Service/User/ public void Post([FromBody]string value) { } }