日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET Web API路由规则(二)

發(fā)布時(shí)間:2024/9/20 asp.net 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET Web API路由规则(二) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

默認(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路由规则(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。