當前位置:成語大全網 - 書法字典 - WebApi 2路由機制

WebApi 2路由機制

中有兩種路由。網。第壹種是在MVC模式下通過url匹配動作,第二種是在WebApi模式下通過http請求匹配動作。在本文中,我們學習了WebApi的路由模式。

首先,創建壹個新的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】在控制器上標識它。

但是,應該註意,路由前綴不能以/開頭