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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

第十五节:Asp.Net Core MVC和WebApi路由规则的总结和对比-第二十节

發(fā)布時(shí)間:2023/12/10 asp.net 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第十五节:Asp.Net Core MVC和WebApi路由规则的总结和对比-第二十节 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一. Core Mvc

1.傳統(tǒng)路由

  Core MVC中,默認(rèn)會(huì)在 Startup類→Configure方法→UseMvc方法中,會(huì)有默認(rèn)路由:routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");?等價(jià)于 app.UseMvcWithDefaultRoute();

(1). 參數(shù)解析說明

  name代表:路由名稱, template代表:路由模板,可以在上面直接賦默認(rèn)值,defaults代表:路由默認(rèn)值;constraints代表:路由約束

(2). 多個(gè)路由

  多個(gè)路由默認(rèn)從上往下解析,注意路由名稱不能相同。

  比如: template: "{controller}/{action}/{id?}", 和 template: "{action}/{controller}/{id?}"兩個(gè)路由規(guī)則共存,那么我既可以通過 https://localhost:44333/Index2/Home 訪問頁(yè)面,也可以通過 https://localhost:44333/Home/Index2 訪問頁(yè)面

1 //1.默認(rèn)路由2 //1.1 簡(jiǎn)版路由3 {4 routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");5 }6 7 //1.2 路由名稱和多個(gè)參數(shù)的問題8 {9 routes.MapRoute( 10 name: "default", 11 template: "{controller}/{action}/{id?}", 12 defaults: new { controller = "Home", action = "Index" } 13 ); 14 routes.MapRoute( 15 name: "default2", 16 template: "{action}/{controller}/{id?}", 17 defaults: new { controller = "Home", action = "Index2" } 18 ); 19 }

2. 屬性路由

(1).Route[]

  Route可以單獨(dú)作用Controller,也可以單獨(dú)作用于action,當(dāng)然也可以同時(shí)作用。

 (前提:注釋掉全局的傳統(tǒng)路由,當(dāng)然也可以不注釋,因?yàn)橥瑫r(shí)存在的話,屬性路由的優(yōu)先級(jí)高)

測(cè)試1:只在控制器上添加 [Route("Home2/{action}")],則可以通過【https://localhost:44333/Home2/Test1】正常訪問.

測(cè)試2:只在Test1方法上添加 [Route("{controller}/Test111")], 則可以通過【https://localhost:44333/Home/Test111】正常訪問

標(biāo)記替換:直接以這種形式[Route("api/[controller]/[action]")]作用于控制器,該控制的匹配規(guī)則都將自動(dòng)適配名稱,該方法普遍用于WebApi上.

代碼如下:

1 [Route("Home2/{action}")]2 public class HomeController : Controller3 {4 5 [Route("{controller}/Test111")]6 public string Test1()7 {8 return "ok1";9 } 10 }

(2).Http[Verb]

  Http[Verb]只能單獨(dú)作用于action.

測(cè)試1:只在Test2方法上添加 [HttpGet("{controller}/Test22")],則可以通過【https://localhost:44333/Home/Test22】正常訪問

測(cè)試2:只在Test2方法上添加 [HttpGet("{controller}/Test22")]和[HttpGet("{controller}/Test222")],則可以通過【https://localhost:44333/Home/Test22】?和【https://localhost:44333/Home/Test232】正常訪問

代碼如下:

1 public class HomeController : Controller2 {3 [HttpGet("{controller}/Test22")]4 [HttpGet("{controller}/Test222")]5 public string Test2()6 {7 return "ok2";8 }9 10 }

(3).多個(gè)屬性路由的合并規(guī)則

A. Route和Route合并:Route可以同時(shí)作用在Controller和action,匹配規(guī)則是“疊加”;而且每個(gè)上面可以放多個(gè),比如控制器上2個(gè),action上3個(gè),則有2*3=6種組合。

測(cè)試:控制器上添加:[Route("Home1/{action}")] 和 [Route("Home2/{action}")],

  ? ? action上添加:[Route("Test3")]、 [Route("Test33")]、 [Route("Test333")]

可以訪問路徑:https://localhost:44333/Home1/Test3/Test3

  https://localhost:44333/Home1/Test3/Test33

  https://localhost:44333/Home1/Test3/Test333 (訪問不了,因?yàn)閍ction上Route以/開頭)

  https://localhost:44333/Home2/Test3/Test3

  https://localhost:44333/Home2/Test3/Test33

  https://localhost:44333/Home2/Test3/Test333 (訪問不了,因?yàn)閍ction上Route以/開頭)

注:action上的屬性路由以 / 或 ~/ 開頭的路由模板不與應(yīng)用于控制器的路由模板合并。

代碼如下:

1 [Route("Home1/{action}")]2 [Route("Home2/{action}")]3 public class HomeController : Controller4 {5 [Route("Test3")]6 [Route("Test33")]7 [Route("/Test333")]8 public string Test3()9 { 10 return "ok3"; 11 } 12 13 }

B. Route和Http[Verb]合并,匹配規(guī)則也是“疊加”,而且每個(gè)上面可以放多個(gè),比如控制器上2個(gè),action上3個(gè),則有2*3=6種組合。

 測(cè)試:控制器上添加:[Route("Home1/{action}")] 和 [Route("Home2/{action}")],

 ? ? ? ? ? ?action上添加:[HttpGet("Test3")]、 [HttpGet("Test33")]、 [HttpGet("Test333")]

可以訪問的路徑和上面的一樣,這里不再做重復(fù)測(cè)試了。

?

(4).擴(kuò)展自定義屬性路由

  新建類,實(shí)現(xiàn)IRouteTemplateProvider接口,繼承Attribute類,然后就通過Template字段來聲明自定義屬性的路由規(guī)則了,如ypfAttribute類。

1 /// <summary>2 /// 自定義路由特性3 /// </summary>4 public class ypfAttribute : Attribute, IRouteTemplateProvider5 {6 public string Template => "api/[controller]/[action]";7 8 /// <summary>9 /// 屬性排序 10 /// </summary> 11 public int? Order { get; set; } 12 13 /// <summary> 14 /// 屬性名 15 /// </summary> 16 public string Name { get; set; } 17

3.傳統(tǒng)路由和屬性路由共存

  通常情況下傳統(tǒng)路由服務(wù)于Core MVC,屬性路由服務(wù)于Restful Api,但如果二者共存的時(shí)候,屬性路由的優(yōu)先級(jí)更高,傳統(tǒng)路由失效。

?測(cè)試案例:打開傳統(tǒng)路由【1.1】簡(jiǎn)版路由,然后在Index方法加[Route("kkk")], 這個(gè)時(shí)候

  (1).要想訪問Index2頁(yè)面,走的依舊是傳統(tǒng)路由:https://localhost:44333/Home/Index2

  (2).要想訪問Index頁(yè)面,只能走屬性路由:https://localhost:44333/kkk

注:這里是把特性加在Index方法上,所以請(qǐng)求地址中不能有控制器名稱哦

?代碼如下:

?

4.區(qū)域路由(Area)

前提:必須給區(qū)域下的控制器加上特性標(biāo)注區(qū)域名稱!!!如: [Area("A1_Areas")]

方案一:

  有幾個(gè)區(qū)域,則通過MapAreaRoute來添加幾個(gè)路由,放在傳統(tǒng)默認(rèn)路由的前面。

1 //3.1 有幾個(gè)區(qū)域配置幾個(gè)區(qū)域路由,并且放在默認(rèn)路由的前面2 {3 //區(qū)域路由4 routes.MapAreaRoute("myAreaRoute1", "A1_Areas", "{area}/{controller}/{action}/{id?}");5 routes.MapAreaRoute("myAreaRoute2", "A2_Areas", "{area}/{controller}/{action}/{id?}");6 7 //默認(rèn)路由8 routes.MapRoute(9 name: "default", 10 template: "{controller=Home}/{action=Index}/{id?}"); 11 12 }

方案二:(推薦!)

  利用MapRoute方法,添加一個(gè)含{area:exists}的路由,必須放在默認(rèn)路由的后面!

1 //3.2 單獨(dú)配置一個(gè)含area的路由,放在默認(rèn)路由的后面2 {3 4 //默認(rèn)路由5 routes.MapRoute(6 name: "default",7 template: "{controller=Home}/{action=Index}/{id?}");8 9 //區(qū)域路由(要放在默認(rèn)路由的后面) 10 routes.MapRoute( 11 name: "default2", 12 template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"); 13 }

測(cè)試:

  訪問Home/Index 頁(yè)面(上面什么特性不要加),里面的連接可以分別跳轉(zhuǎn)到A1和A2區(qū)域下的頁(yè)面。

?

二. Core WebApi

  默認(rèn)情況下WebApi的路由規(guī)則是RestFul風(fēng)格的,而且WebApi項(xiàng)目并沒有全局注冊(cè)傳統(tǒng)路由,這種模式很不友好.通常我們有兩類改造方案。

(前提補(bǔ)充:[Route]和[ApiController]要成對(duì)出現(xiàn),可以同時(shí)和傳統(tǒng)路由共存,優(yōu)先級(jí)比傳統(tǒng)路由高,但是[ApiController]不能單獨(dú)出現(xiàn),不能單獨(dú)和傳統(tǒng)路由共存;而?[Route]可以單獨(dú)和全局路由共存)

方案一:全局配置,全局進(jìn)行改造,在Configure方法中添加規(guī)則為:"api/{controller}/{action}/{id?}"和"api/{area:exists}/{controller}/{action}/{id?}"的全局路由和區(qū)域路由,則我們就可以通過上述路徑進(jìn)行訪問了。

1 app.UseMvc(routes =>2 {3 //全局路由4 routes.MapRoute(5 name: "default",6 template: "api/{controller}/{action}/{id?}",7 defaults: new { controller = "Second", action = "Test" });8 9 //區(qū)域路由(對(duì)應(yīng)區(qū)域下面的控制器一定要加 [Area("")]) 10 routes.MapRoute( 11 name: "default2", 12 template: "api/{area:exists}/{controller}/{action}/{id?}"); 13 14 15 //用于顯示默認(rèn)訪問,這樣直接打開https://localhost:44387/,就可以直接調(diào)用方法了。 16 //routes.MapRoute( 17 // name: "default3", 18 // template: "{controller}/{action}/{id?}", 19 // defaults: new { controller = "Second", action = "Test" }); 20 });

方案二:不需要全局配置,在每個(gè)控制器的上面添加 [Route("api/[controller]/[action]")]和[ApiController],也可以達(dá)到同樣的目的。

1 [Route("api/[controller]/[action]")]2 [ApiController]3 public class SecondController : ControllerBase4 { 5 [HttpGet]6 public string Test()7 {8 return "ok";9 } 10 [HttpGet] 11 public string Test2() 12 { 13 return "ok2"; 14 } 15 [HttpPost] 16 public string Test3(UserInfor model) 17 { 18 return $"{model.userName}+{model.pwd}"; 19 } 20 }

PS:在實(shí)際開發(fā)中,可以這兩種方案相互結(jié)合進(jìn)行使用。

?

總結(jié)

以上是生活随笔為你收集整理的第十五节:Asp.Net Core MVC和WebApi路由规则的总结和对比-第二十节的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 中文字幕精品亚洲 | 在线亚洲人成电影网站色www | 亚洲中文字幕无码av永久 | 日本中文字幕一区二区 | www.狠狠| 国产成人无码精品久久久性色 | 国产一区二区视频免费观看 | 宅男深夜视频 | 看片网址国产福利av中文字幕 | 美女脱得一干二净 | 日本五十路在线 | 扒下小娇妻的内裤打屁股 | 欧美一区二区三区在线 | 欧美日韩国产图片 | 日韩三级在线观看 | 国产精品欧美一区喷水 | 亚洲91网站 | 伊人天堂av | 影音先锋国产资源 | a视频免费观看 | 亚洲精品视频在线免费 | 精品熟女一区二区三区 | 亚洲精品中文无码AV在线播放 | 尤物天堂 | 精品一级少妇久久久久久久 | 久久久在线免费观看 | 国产午夜精品无码一区二区 | 日本美女毛茸茸 | 日韩精品久久一区二区 | 亚洲tv在线观看 | 福利视频一区二区 | 欧美性xxxxx 亚洲特黄一级片 | 成年人在线视频网站 | 日日干日日草 | 麻豆电影网站 | 男人的网站在线观看 | 欧美日韩视频在线观看一区 | 国产一区二区三区精品在线 | 亚洲福利一区 | 亚洲精品www久久久久久广东 | 中文字幕第28页 | 日韩三级视频在线 | 中文毛片无遮挡高潮免费 | 夜色视频在线观看 | 欧美视频在线免费 | 好姑娘在线观看高清完整版电影 | 美女高潮黄又色高清视频免费 | 国产女主播喷水高潮网红在线 | 日日夜夜精品视频免费 | 性av在线| 看黄色一级片 | 欧美一级免费看 | 少妇高潮久久久久久潘金莲 | 熟女人妻在线视频 | 日韩欧美福利视频 | 青青青草国产 | 蜜桃视频在线观看一区二区 | 国产又粗又猛又大爽 | 污网站免费看 | 久久视精品 | 国自产拍偷拍精品啪啪一区二区 | 波多野结衣中文字幕一区二区三区 | 人妻少妇偷人精品久久性色 | 91漂亮少妇露脸在线播放 | 免费观看在线高清 | 韩国精品一区二区 | 亚洲午夜无码久久久久 | 欧洲久久久久久 | 日韩成人在线一区 | 国产在线视频卡一卡二 | 三年大全国语中文版免费播放 | 日本精品国产 | 久久精品国产亚洲av蜜臀色欲 | 蜜桃av噜噜一区二区三区网址 | 疯狂做爰高潮videossex | 色综合久久五月 | 一区二区欧美视频 | 欧美日韩在线观看视频 | 欧美国产视频 | 伊人久久九 | 国产一级免费视频 | 国产精品理论片在线观看 | 女人高潮被爽到呻吟在线观看 | 青青在线视频观看 | 久久久久久69 | 色图av| 国产中文一区二区 | 偷拍青青草 | 日韩不卡一区二区三区 | 最新日本中文字幕 | 91系列在线观看 | av先锋影音 | 亚洲综合久久网 | 综合激情伊人 | 国产丝袜在线视频 | 亚洲区一区 | 亚洲综合专区 | 日本污污网站 | 免费黄色高清视频 |