前段時間一直致力於MVC webapi 技術的研究,中途也遇到過好多阻礙,特別是api路由的設置和URL的訪問形式,所以針對這個問題,特意做出了記錄,以供日后有同樣困惑的大蝦們借鑒:
在Mvc WEBAPI中的APP_STARTA文件夾中有一個默認的api路由config文件設置:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
從中我們可以看出,api的路由訪問是沒有對應的action方法名的,默認的訪問都是對應的controller的名稱。因為api controller都有對應的類型的命名規則,get,post,以及對應的帶參數的get,post方法等等,系統會根據URL請求的類型和參數來判別該使用哪個action方法,所以我在項目運行的時候,就感覺不是很方便,當要處理的方法過多,甚至經常會遇到的情況就是,請求類型相同,然后參數也相同的情況,這樣系統就有可能很混亂,找不到正確的action方法,得不到我們想要的效果。為此,在適當的情況下,我們可以修改對應的默認路由設置,把路由改為:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
通過給默認路由加上一個action,使其能對應到相應的方法名中。
然后再在前台通過Ajax的方式訪問后台對應的action方法:
function handHandler() {
$.ajax({
type: 'POST',
data: JSON.stringify(document.getElementById("handHandler").value),
url: "/api/Test/HandHandler",
contentType: "application/json",
success: function (results) {
alert(results);
}
});
}
這是一個默認的帶參數的提交post類型的訪問方式,后台數據代碼我就不具體列了。這里特別強調的一個是,get方式訪問和post方式訪問的一個不同點,當我們執行帶參的URL訪問的時候,后台對應的get方式的action函數參數可以不需要帶[FromBody]的前綴修飾,而post方式的帶參數URL需要加上,不然是找不到你想要的action的,如下格式:
[HttpPost]
public string HandHandler([FromBody]string requestData)
{
}
這就是Mvc webapi的整個路由的額設置和訪問過程。