首先,創建壹個新的WebApi項目,並選擇ASP.NET Web應用程序(。NET框架)。
這裏我們先來看看WebApi的基本配置WebApiConfig.cs,它的路徑是/app _ start/webapiconfig.cs。
首先用瀏覽器啟動webapi項目。
妳會發現頁面顯示403,這是正常的,因為我們在創建新項目時沒有添加MVC,所以沒有可視化視圖頁面,但我們獲得了這個項目的端口號。
為了更方便直觀地看到我們的接口請求,我們選擇postman,並首先在項目中創建壹個新的控制器。
通過以上操作,我們已經構建了壹個webApi2項目,接下來我們將在這個項目的基礎上開發和學習webApi 2。
webApi的路由過程主要經歷以下三個步驟。
WebApiConfig.cs文件是路由表的核心文件。WebApiConfig中只有壹個方法,這個方法在Global.asax文件中的Application_Start()方法中調用,這是壹個全局文件,將在我們的網頁啟動時執行。register(http configuration config)方法用於配置WEB API路由。
因此,當webAP項目啟動時,將執行Global.asax,並在該文件中註冊WebApiConfig.cs的壹系列初始化配置,從而實現webapi。
WebApi 2框架使用路由表。默認路由由Web API的Visual Studio項目模板創建。
轉到MapHttpRoute的定義,您可以看到它有四個重載。
讓我們分別看看每個參數的功能。
webApi2項目自動為我們創建了壹條默認路線。
經過上面的解釋,我們知道匹配的URL是api/{controller}/{id}
那麽在實際請求中我們應該如何請求呢?
創建新的學生控制器
依次申請下列地址。
總結:
默認路由的缺點
如下
添加以下操作。
有結果了。
讓我們看看這個請求是如何匹配的。首先,找到/app _ start/webapiconfig.cs。
根據路由模板,我們請求的路由沒有操作名稱,因此它如何匹配?
實際上,當我們訪問http://localhost:65066/API/student的url時,webapi會自動匹配api/{controller}/{id}的模板。在這個路徑中,Student是控制器,那麽它如何找到getStudentName的動作呢?顯然,我們沒有通過參數操作。實際上,Webapi的路由規則是通過http方法匹配相應的動作。我們用get方法請求這個地址,因此webapi將在Order的控制器中找到get請求方法,我們的getStudentName以GET開頭。符合webapi的匹配規則,所以請求成功,但前提是妳寫的方法必須以GET開頭。如果當前控制器中沒有get,則表明請求的資源不支持http方法“get”。
當然,不從Get開始的前提是必須添加【HttpGet】的特性,這樣webapi才能知道這是get的請求方法並能正確匹配。
然後我們回到/App_Start/WebApiConfig.cs,看看其中每個參數的含義。首先,我們轉向它的定義,發現它是HttpRouteCollection的擴展方法,MapHttpRoute有四種類型的重載。
在WebApiConfig.cs中,將其修改為以下路由模板。
接口請求如下
很容易理解如何通過動作的名稱進行匹配。上面的StudentName()是方法的名稱,webApi將默認它作為操作的名稱。如果您希望方法的名稱不同於操作的名稱,您還可以自定義操作的名稱,這可以通過功能ActionName來實現,如下所示:
先看看路由模板。
對於具有相同請求類型和參數的請求,會出現不傳遞參數的問題,不會找到匹配的資源或傳遞參數,但會找到與請求匹配的多個操作,如下所示。
有兩種方法可以解決上述問題。
如果要使用feature routing,必須首先在WebApiConfig.cs的Register方法中啟用feature routing(壹般來說,當我們創建壹個新的WebApi項目時,我們會自動在Register方法中添加這句話。)
特色路由的目的是解決我們的公共路由模板引擎無法解決的問題。動作定義了特征路由後,可以通過特征路由上面的路由規則找到。
只要有特征路由,匹配規則就會根據特征進行路由。
如下修改studentController
涉及
涉及
路由前綴的壹般做法是使用特性【route prefix】在控制器上標識它。
但是,應該註意,路由前綴不能以/開頭