1. 程式人生 > >Web Api ——創建WebAPI

Web Api ——創建WebAPI

結構 添加 ica font TE 開頭 設置 修改 我們

Web Api ——創建WebAPI

方法在Win10 + VS2017(MVC5)測試通過

1、建立 WebApi項目:

選擇菜單 “文件-》新建醒目-》web -》ASP.NET Web 應用程序”

技術分享圖片

輸入項目名稱和位置,確定,進入模板選擇頁面。

選擇 WEB API 模板(選擇Web API 時會添加對MVC 的支持)

技術分享圖片

2、添加ApiController

查看生產的目錄結構,發現WebAPI 的結構和普通MVC程序結構是非常類似的。

默認VS會在Controllers 文件夾下創建一個示例控制器: ValuesController

技術分享圖片

技術分享圖片

通過查看該控制器代碼,發現WebAPI的控制器與MVC控制器的主要區別:

1)WebAPI控制器類繼承自 ApiController 類

2)WebAPI 方法返回的是原始數據,而不是視圖。

(1) 添加自己的控制器時,只需要在參照示例,在 Controllers 文件夾下,新建一個繼承自 ApiController 的類

ApiController 在命名空間 System.Web.Http 下

控制器一般按約定以 Controller結尾,如:ActionController

3、Web API 中的路由和方法

我們可以在 App_Start 文件夾中的 WebApiConfig 文件內,查看並修改 WebAPI 的路由(當然還有別的其他配置)

在該文件內,有一個默認路由配置

技術分享圖片

可以看出,WebAPI 路由與MVC理由非常類似,但也有有個明顯的區別,在 Web API 路由中,沒有 {action} 指令。

這是因為 Web API 默認操作以請求使用的HTTP動詞來調度

也就是說,在控制器中有以常見 Http 動詞(Get, Post, Put, Delete, Head, Patch, Options)開頭的方法,這個方法就可以匹配相應動詞的請求。

例如,在 ValuesController 控制器中的 Get 方法

技術分享圖片

當客戶端以 Get 方式請求到該控制器時,Web API 將自動匹配 Get 方法 。

對於名稱不能匹配常見動詞的方法,Web API 默認支持 post 請求,這時,需要在方法中使用 [Http...] 特性進行裝飾。

如:

技術分享圖片

這個時候,默認的路由配置就不適用了,需要在 WebApiConfig 文件添加自定義的路由配置(主要是添加 {action} 特性,以支持不匹配動詞的方法)

技術分享圖片

這一步完成後,就可以在本項目中調用該API方法了。

調用方法和普通 MVC 方法調用一樣。

之所以說可以在本項目調用,因為在其他項目調用時,屬於跨域操作,還需要跨域調用設置。

4、Web API 中跨域調用

要Web API 可以跨域調用,首先需要在項目中添加 Microsoft.AspNet.Cors 的引用。可以使用NuGet在項目中安裝 Microsoft.AspNet.Cors

註: 在OWIN 中需要引用 的是 Microsoft.AspNet.WebApi.Cors

技術分享圖片

Microsoft.AspNet.Cors 安裝成功後,需要在 WebApiConfig 文件中添加可跨域方法配置

最主要添加代碼

config.EnableCors(new EnableCorsAttribute("*", "*", "*"));

EnableCorsAttribute 在命名空間 System.Web.Http.Cors 中(在新安裝 的 Microsoft.AspNet.Cors 內)

技術分享圖片

而其中的參數,表示對可跨域調用的方法的配置(這裏全為 "*" 表示所有方法均可跨域調用)

到處為止,Web API 創建、配置已經完成。

但是有的時候在跨域配置完成後,任然不能在其他項目進行跨域調用。這有可能是瀏覽器不支持的原因。瀏覽器的支持程度可以參照下圖(從網上扒拉過來的)

技術分享圖片

這個時候,就需要在調用 API 的 JS 中設置對跨域的支持。

好在 JQuery 提供了簡單的方法,只需要通過 JQ 設置 :jQuery.support.cors = true

技術分享圖片

上圖中, jQuery.support.cors = true 表示設置瀏覽器對跨域調用的支持。

ajax 方法即是調用 控制器 (圖中是 IPAddress)中的 方法 (GetIp, 參數 為 0),可以看出調用方法與MVC 方法是一樣的。

轉載:https://www.cnblogs.com/xtblog/p/8099382.html

至此,一個簡單的 Web API 已經創建完畢。

Web Api ——創建WebAPI