ASP.NET Web API路由规则(二)
默認(rèn)的規(guī)則
在ASP.NET MVC4中
global.asax.cs代碼中并無注冊(cè)默認(rèn)路由規(guī)則的代碼
代碼如下:
public class WebApiApplication : System.Web.HttpApplication{protected void Application_Start(){AreaRegistration.RegisterAllAreas();FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);RouteConfig.RegisterRoutes(RouteTable.Routes);BundleConfig.RegisterBundles(BundleTable.Bundles);}}那么默認(rèn)的路由規(guī)則是在哪里注冊(cè)的呢?
我們發(fā)現(xiàn)
在項(xiàng)目中多了一個(gè)App_Start文件夾
其中RoteConfig.cs文件就是注冊(cè)默認(rèn)路由規(guī)則的程序所在了
代碼如下:
public static void RegisterRoutes(RouteCollection routes){routes.IgnoreRoute("{resource}.axd/{*pathInfo}");routes.MapHttpRoute(name: "DefaultApi",routeTemplate: "api/{controller}/{id}",defaults: new { id = RouteParameter.Optional });routes.MapRoute(name: "Default",url: "{controller}/{action}/{id}",defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });}這里有兩個(gè)路由規(guī)則
一個(gè)是針對(duì)API請(qǐng)求的路由規(guī)則
另一個(gè)是針對(duì)普通MVC頁面請(qǐng)求的路由規(guī)則
請(qǐng)求路徑以字符串”api”開頭的時(shí)候?qū)⒃L問webAPI的函數(shù)
(注:至于為什么用MapHttpRoute而不是MapRoute;為什么用routeTemplate而不是用url我們?cè)僖院蟮恼鹿?jié)介紹)
因?yàn)閞outeTemplate中有了{(lán)controller}
所以針對(duì)api的請(qǐng)求可以自動(dòng)映射到指定的controller類
那么是怎么找到合適的Action的呢?
系統(tǒng)根據(jù)請(qǐng)求的方式來判斷
如果是以GET的方式請(qǐng)求的
那么將匹配controller中以“Get”開頭的Action
如果是以POST的方式請(qǐng)求的
那么將匹配controller中以“Post”開頭的Action
如果是以PUT的方式請(qǐng)求的
那么將匹配controller中以“Put”開頭的Action
如果是以DELETE的方式請(qǐng)求的
那么將匹配controller中以“Delete”開頭的Action
除了這幾個(gè)默認(rèn)的請(qǐng)求方式
你還可以在客戶端定義你自己的請(qǐng)求方式!
routeTemplate最后面的id匹配Action中的參數(shù),
這與ASP.NET MVC一致
初步的自定義
那么是不是所有的匹配GET請(qǐng)求的Action都必須以“Get”開頭呢
不是的
我們可以用方法特性來標(biāo)記一個(gè)方法屬于什么什么請(qǐng)求
如下:
[HttpGet]public IEnumerable<Product> AllProducts(){return products;}對(duì)應(yīng)的方法特性還有
[HttpPost]
[HttpDelete]
[HttpPut]
亦可以使用如下這樣的方法特性來區(qū)分
[AcceptVerbs("GET")]
[AcceptVerbs("GET", "HEAD")]
另外如果你在Controller中寫了一個(gè)函數(shù)
必須是public的,必須以Get開頭
而又不想讓客戶端以請(qǐng)求到此Action
那么可以使用方法特性
[NonAction]
來標(biāo)記此方法
進(jìn)一步自定義
我們?nèi)匀豢梢园補(bǔ)ction的名字放到默認(rèn)的請(qǐng)求規(guī)則中
只要把routeTemplate改為如下即可:
routes.MapHttpRoute(name: "ActionApi",routeTemplate: "api/{controller}/{action}/{id}",defaults: new { id = RouteParameter.Optional });總結(jié)
以上是生活随笔為你收集整理的ASP.NET Web API路由规则(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Web API路由
- 下一篇: 核电概念上市公司龙头 有几家真的值得关注