最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解如何在ASP.NET Core中使用Route特性

 更新時(shí)間:2021年01月24日 09:23:43   作者:一線碼農(nóng)  
這篇文章主要介紹了如何在ASP.NET Core中使用Route特性,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

 ASP.NET Core 中的 Route 中間件的職責(zé)在于將 request 匹配到各自 Route 處理程序上,Route 分兩種:基于約定 和 基本特性 模式。

基于約定 模式的Route采用集中化的方式,而 基于特性 的方式允許你在 Action 或者 Controller 上單獨(dú)定義,到底采用哪一種可以基于你自己的應(yīng)用場(chǎng)景,本篇就來(lái)討論如何使用 基于特性 模式。

創(chuàng)建 Controller 類

創(chuàng)建一個(gè) DefaultController 類,新增如下代碼。

 public class DefaultController : Controller
 {
  [Route("")]
  [Route("Default")]
  [Route("Default/Index")]
  public ActionResult Index()
  {
   return new EmptyResult();
  }
  [Route("Default/GetRecordsById/{id}")]
  public ActionResult GetRecordsById(int id)
  {
   string str = string.Format
   ("The id passed as parameter is: {0}", id);
   return Ok(str);
  }
 }

Controller 級(jí)別定義 Route 特性

Route特性可用于 Controller 和 Action 級(jí)別,值得注意的是,如果應(yīng)到到前者,那么 Controller 下的所有 Action 都受這個(gè) Route 管控。

如果你仔細(xì)觀察上面的 DefaultController 類代碼,你會(huì)發(fā)現(xiàn)兩個(gè) Action 方法的 Route 路徑都有 Default 前綴,這就不優(yōu)雅了,優(yōu)化方式就是把 Route 路徑中的 Default 提取到 Controller 級(jí)別,代碼如下:

[Route("Default")] 
public class DefaultController : Controller
{
 [Route("")]
 [Route("Index")]
 public ActionResult Index()
 {
  return new EmptyResult();
 }
 [HttpGet]
 [Route("GetRecordsById/{id}")]
 public ActionResult GetRecordsById(int id)
 {
  string str = string.Format("The id passed as parameter is: {0}", id);
  return Ok(str);
 }
}

可以看出當(dāng) Controller 和 Action 級(jí)別都被 Route 打上標(biāo)記之后,Asp.Net Core 中的 Route 引擎會(huì)自動(dòng)將兩者拼接起來(lái),當(dāng)然更簡(jiǎn)單粗暴的做法就是在 Controller 上使用 RoutePrefix 特性,如下代碼所示:

[RoutePrefix("services")]
public class HomeController : Controller
{
 //Action methods
}

Action 級(jí)別定義 Route 特性

參考剛才的 DefaultController 類,我在 Index 方法上面定義了三個(gè) Route 特性,這就意味著下面三種 Route 都可以訪問到 Index() 方法,如下代碼所示:

http://localhost:11277
http://localhost:11277/home
http://localhost:11277/home/index

常常在 基于約定 模式的Route中,它的 Route template 會(huì)有一些對(duì)參數(shù)的約定,比如下面的代碼:

   app.UseEndpoints(endpoints =>
   {
    endpoints.MapControllerRoute(
     name: "default",
     pattern: "{controller=Home}/{action=Index}/{id?}");
   });

同樣 基于特性 模式的 Route 也是可以使用參數(shù)模式的,比如文章之前的 DefaultController.GetRecordsById 就是的,值得注意的是模板中的 {id} 表示可接收任何參數(shù),如 string,int 等等,如果你想限定為 int 的話,也是可以實(shí)現(xiàn)的。

使用 Route 約束

Route 約束 就是 Controller 前的一個(gè)防火墻,他會(huì)踢掉一些不合規(guī)范的 Action 請(qǐng)求,比如說(shuō):你要求某個(gè) Action 接收的參數(shù)必須是 int,那在 Route 模板中定義的語(yǔ)法格式一定是這樣的 {parameter:constraint},如下代碼所示:

[Route("Default/GetRecordsById/{id:int}")]
public ActionResult GetRecordsById(int id)
{
 string str = string.Format("The id passed as parameter is: {0}", id);
 return Ok(str);
}

在 Route 中使用可選參數(shù)

你也可以在 Route Template 上指定可選參數(shù),意味著這個(gè)參數(shù)可傳可不傳,格式如下:

[Route("Sales/GetSalesByRegionId/{id?}")]

有一點(diǎn)非常重要,當(dāng)你使用了 Route特性 之后,其實(shí) Controller 或者 Action 的名字就不再重要了,因?yàn)?Route處理引擎 已經(jīng)不再將其作為參考選項(xiàng),下面的代碼片段展示了如何在 Action 方法上變更 Route template 格式。

[Route("Home/GetRecordsById/{id:int}")]
public ActionResult GetRecordsById(int id)
{
 string str = string.Format("The id passed as parameter is: {0}", id);
 return Ok(str);
}

接下來(lái)可以直接使用如下地址訪問 GetRecordsById 方法。

http://localhost:11277/home/GetRecordsById/1

對(duì) Action 中的參數(shù)使用多個(gè)約束

真實(shí)場(chǎng)景中你不僅要求 id 必須是整數(shù),還要求必須有一定意義,比如說(shuō)最小值為1,對(duì)這種有 多重約束 的需求如何去實(shí)現(xiàn)呢? 請(qǐng)看下面代碼。

[Route("Default/GetRecordsById/{id:int:min(1)}")]
public ActionResult GetRecordsById(int id)
{
 string str = string.Format("The id passed as parameter is: {0}", id);
 return Ok(str);
}

常使用的 Route 約束

  • int 限定為 int 類型
  • max/min 限定 int 的最大數(shù)和最小數(shù)
  • minlength 限定 string 的最小長(zhǎng)度
  • regex 限定符合的正則

創(chuàng)建自定義的 Route 約束

如果上面的一些約束不滿足你的要求,你完全可以為你的場(chǎng)景深度定制,做法就是使用 IRouteConstraint 接口并實(shí)現(xiàn)它的 Match 方法即可,如下代碼所示:

 public class CustomRouteConstraint : IRouteConstraint
 {
  public bool Match(HttpContext httpContext, IRouter route,
  string routeKey,
  RouteValueDictionary values, RouteDirection routeDirection)
  {
   throw new NotImplementedException();
  }
 }

在 Controller 上使用 token 占位符

所謂的 token 占位符 就是具有一些特定含義的占位符號(hào),比如說(shuō):[action], [area] 和 [controller],分別表示用你真實(shí)的 Controller 和 Action 去替換,下面的代碼展示了如何使用這種模式去實(shí)現(xiàn)。

[Route("[controller]/[action]")]
public class HomeController : Controller
{
 private readonly ILogger<HomeController> _logger;
 public HomeController(ILogger<HomeController> logger)
 {
  _logger = logger;
 }
 public IActionResult Index()
 {
  return View();
 }
 //Other action methods
}

整體來(lái)看,基于特性 的 Route 給了你更多的操控權(quán)限,靈活的 Route Template 配置實(shí)現(xiàn)了 Controller 和 Action 的解耦,當(dāng)然這里也不是說(shuō) 基于約定 的Route 不好,畢竟人家是 Global 級(jí)別的,真實(shí)場(chǎng)景下兩者更多的是混著用。

譯文鏈接:https://www.infoworld.com/article/3569369/how-to-use-attribute-routing-in-aspnet-core.html

到此這篇關(guān)于如何在ASP.NET Core中使用Route特性的文章就介紹到這了,更多相關(guān)ASP.NET Core Route特性內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • ASP.NET Core在WebApi項(xiàng)目中使用MiniProfiler分析Entity Framework Core

    ASP.NET Core在WebApi項(xiàng)目中使用MiniProfiler分析Entity Frame

    這篇文章介紹了ASP.NET Core在WebApi項(xiàng)目中使用MiniProfiler分析Entity Framework Core的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • .Net語(yǔ)言Smobiler開發(fā)之如何仿微信朋友圈的消息樣式

    .Net語(yǔ)言Smobiler開發(fā)之如何仿微信朋友圈的消息樣式

    這篇文章主要介紹了.Net語(yǔ)言Smobiler開發(fā)平臺(tái)如何仿微信朋友圈的消息樣式?本文為大家揭曉答案
    2016-09-09
  • .NET實(shí)現(xiàn)ChatGPT的Stream傳輸?shù)倪^程

    .NET實(shí)現(xiàn)ChatGPT的Stream傳輸?shù)倪^程

    這篇文章主要介紹了.NET如何實(shí)現(xiàn)ChatGPT的Stream傳輸,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • .Net Core中使用Autofac替換自帶的DI容器的示例

    .Net Core中使用Autofac替換自帶的DI容器的示例

    Autofac比Core中自帶的DI功能強(qiáng)大的多,比如:屬性注入、基于名稱注入、子容器、自定生存期管理、遲緩初始化,本文就詳細(xì)的來(lái)介紹一下.Net Core Autofac替換DI容器,感興趣的可以了解一下
    2021-06-06
  • asp.net 身份驗(yàn)證(分目錄驗(yàn)證篇)

    asp.net 身份驗(yàn)證(分目錄驗(yàn)證篇)

    在上一篇博文《asp.net中的身份驗(yàn)證(最簡(jiǎn)單篇)》中的身份驗(yàn)證雖然很簡(jiǎn)單,但是有一個(gè)缺點(diǎn),就是訪問整個(gè)網(wǎng)站都必須要經(jīng)過身份驗(yàn)證,而事實(shí)上,很多網(wǎng)站都不會(huì)這么要求的。
    2009-05-05
  • Entity Framework Core表名映射

    Entity Framework Core表名映射

    這篇文章介紹了Entity Framework Core實(shí)現(xiàn)表名映射的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • ASP.NET微信公眾號(hào)查看粉絲信息接口

    ASP.NET微信公眾號(hào)查看粉絲信息接口

    這篇文章主要為大家詳細(xì)介紹了ASP.NET微信公眾號(hào)查看粉絲信息接口的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • C#中efcore-ShardingCore呈現(xiàn)“完美”分表

    C#中efcore-ShardingCore呈現(xiàn)“完美”分表

    本文簡(jiǎn)單的介紹了efcore的分表,著重介紹了efcore下最完美的分表組件ShardingCore,可以幫助大家更好的學(xué)習(xí),感興趣的小伙伴可以參考一下
    2021-08-08
  • 子窗口給父窗口賦值實(shí)現(xiàn)思路及案例演示

    子窗口給父窗口賦值實(shí)現(xiàn)思路及案例演示

    今天學(xué)習(xí)一下javascript實(shí)現(xiàn)從父窗口打開一個(gè)子窗口,在子窗口處理一些結(jié)果之后,把結(jié)果賦值于父窗口的文本框內(nèi),接下來(lái)介紹實(shí)現(xiàn)方法,感興趣的朋友可以了解下,希望本文對(duì)你有所幫助
    2013-01-01
  • asp.net實(shí)現(xiàn)三層架構(gòu)的例子

    asp.net實(shí)現(xiàn)三層架構(gòu)的例子

    這篇文章主要介紹了asp.net實(shí)現(xiàn)三層架構(gòu)的例子,十分的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。
    2015-07-07

最新評(píng)論

黄石市| 鹤山市| 贞丰县| 抚宁县| 汉沽区| 湟源县| 巨鹿县| 蒲城县| 崇信县| 大同市| 元谋县| 凤山市| 龙泉市| 繁昌县| 棋牌| 罗城| 旅游| 三亚市| 横峰县| 肃北| 灵山县| 星座| 遂川县| 山东| 潢川县| 保德县| 望江县| 凤庆县| 张北县| 辽源市| 丰镇市| 维西| 若羌县| 康保县| 双江| 措美县| 仁布县| 广东省| 炎陵县| 锦州市| 吴旗县|