默認的規則
在ASP.NET MVC4中
global.asax.cs代碼中並無注冊默認路由規則的代碼
代碼如下:
那么默認的路由規則是在哪里注冊的呢?
我們發現
在項目中多了一個App_Start文件夾
其中RoteConfig.cs文件就是注冊默認路由規則的程序所在了
代碼如下:
這里有兩個路由規則
一個是針對API請求的路由規則
另一個是針對普通MVC頁面請求的路由規則
請求路徑以字符串”api”開頭的時候將訪問webAPI的函數
(注:至於為什么用MapHttpRoute而不是MapRoute;為什么用routeTemplate而不是用url我們再以后的章節介紹)
因為routeTemplate中有了{controller}
所以針對api的請求可以自動映射到指定的controller類
那么是怎么找到合適的Action的呢?
系統根據請求的方式來判斷
如果是以GET的方式請求的
那么將匹配controller中以“Get”開頭的Action
如果是以POST的方式請求的
那么將匹配controller中以“Post”開頭的Action
如果是以PUT的方式請求的
那么將匹配controller中以“Put”開頭的Action
如果是以DELETE的方式請求的
那么將匹配controller中以“Delete”開頭的Action
除了這幾個默認的請求方式
你還可以在客戶端定義你自己的請求方式!
routeTemplate最后面的id匹配Action中的參數,
這與ASP.NET MVC一致
初步的自定義
那么是不是所有的匹配GET請求的Action都必須以“Get”開頭呢
不是的
我們可以用方法特性來標記一個方法屬於什么什么請求
如下:
對應的方法特性還有
[HttpPost]
[HttpDelete]
[HttpPut]
亦可以使用如下這樣的方法特性來區分
[AcceptVerbs("GET")]
[AcceptVerbs("GET", "HEAD")]
另外如果你在Controller中寫了一個函數
必須是public的,必須以Get開頭
而又不想讓客戶端以請求到此Action
那么可以使用方法特性
[NonAction]
來標記此方法
進一步自定義
我們仍然可以把action的名字放到默認的請求規則中
只要把routeTemplate改為如下即可:
謝謝大家與我交流~~~~~