之前兩篇文章講解了 Web Service 和 WCF 的部署調用,本章我們主要來研究一下 WebAPI 的部署調用,其實相對于其他倆中技術, WebAPI 更加另類,為什么這么說呢,因為之前我們在學習無論是 Web Service ,還是 WCF 的時候,這兩種技術在遠程調用的時候,都需要添加服務引用才能調用得到,但是 WebAPI 則不同,對比之前兩種技術,WebAPI 更接近于 ASP.net MVC 這種框架,雖然說 WebAPI 可以寄存在控制臺程序,甚至 Winform 程序中,但是 WebAPI 本質就是一個支持謂詞的 HTTP 請求。
WebAPI:本質是支持謂詞的 HTTP 請求,類似于 MVC 。
接下來我們從頭來一遍,看看 WebAPI 到底是什么東西。首先,還是之前的那個項目,我們之前在建立項目選擇的時候就已經創建了含有 WebAPI 的 MVC 框架,所以在項目中會自動生成一個文件
熟悉 MVC 框架的朋友可能會覺得眼熟,其實現在很多公司在建立 MVC 項目的時候都已經直接創建含有 WebAPI 的 MVC 項目了。
從這個自動生成的文件中,我們可以看出跟 MVC 的路由配置很相像,上圖中第一段代碼是我自定義的,地下那段代碼是自動生成的,至于為什么要自定義,這個還是看個人愛好,因為上面的默認格式更加符合 RESTful 風格,而底下自動生成的代碼則是拋棄了 action 使用謂詞的方式自動檢索控制器里面的方法,但是如果出現方法名稱不規范的時候就會出現問題。
接下來,我們新建一個控制器,并在控制器當中寫一個簡單的 Get 方法
方法本身沒有什么特別,但是需要注意的是,這個控制器是需要繼承自 ApiController 這個類的,而一般的 Controller 責集成的是 Controller 這個類。接下來,我們就算是部署成功了,接下來我們來聊一聊什么是謂詞。
所謂的謂詞,就是指我們在調用請求時候的方法,這點大家都很了解,無論是使用 Ajax 還是正常提交請求,都會涉及到 get , post 之類的方法,而在 WebAPI ,默認的路由匹配也是通過這種謂詞的形式,舉個例子,如果我們在某個 Controller 中定義某個方法,取名為 GetUser ,那么此時對于默認路由來講也是可以匹配到的,,這就有些奇怪了,為什么配置了 { action }和沒有配置的結果都是一樣的呢,其實這就是 .net 常說的約定大于配置,默認的路由匹配請求的方式是:在找到相應的 Contorller ,之后在根據你提交的路徑中是否出現 Get 為首字母的方法,這樣就會跳轉過去。同樣也適用于 post , delete, put 等方法。
接下來我們還要說一個特性 ?[ HttpGet ]
[ HttpGet ]:該特性用來表示 Contorller 中的方法,表示了該特性的方法只能以 Get 方式請求到。
同樣的,也有對應其他請求的特性。
接下來就是通過遠程控制臺調用我們之前寫的這個方法了,在 WebAPI 中,遠程調用我們寫好的方法有些不一樣,他不需要像在 Web Service 或是 WCF 中添加服務引用,因為 WebAPI 本質上是一個 HTTP 請求,那么我們只需要在調用端寫好地址,直接請求就可以了。
上圖中我是使用 HttpClient 的方法獲取的,也可以使用 HttpWebRequest 的方法調用
至此,就可以在控制臺程序上面調用到遠程服務的代碼了。