亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

創(chuàng)建 Controller 類

創(chuàng)建一個 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 級別定義 Route 特性

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

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

[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);
 }
}

可以看出當 Controller 和 Action 級別都被 Route 打上標記之后,Asp.Net Core 中的 Route 引擎會自動將兩者拼接起來,當然更簡單粗暴的做法就是在 Controller 上使用 RoutePrefix 特性,如下代碼所示:

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

Action 級別定義 Route 特性

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

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

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

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

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

使用 Route 約束

Route 約束 就是 Controller 前的一個防火墻,他會踢掉一些不合規(guī)范的 Action 請求,比如說:你要求某個 Action 接收的參數(shù)必須是 int,那在 Route 模板中定義的語法格式一定是這樣的 {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ù),意味著這個參數(shù)可傳可不傳,格式如下:

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

有一點非常重要,當你使用了 Route特性 之后,其實 Controller 或者 Action 的名字就不再重要了,因為 Route處理引擎 已經(jī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);
}

接下來可以直接使用如下地址訪問 GetRecordsById 方法。

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

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

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

[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 的最小長度
  • regex 限定符合的正則

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

如果上面的一些約束不滿足你的要求,你完全可以為你的場景深度定制,做法就是使用 IRouteConstraint 接口并實現(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 占位符 就是具有一些特定含義的占位符號,比如說:[action], [area] 和 [controller],分別表示用你真實的 Controller 和 Action 去替換,下面的代碼展示了如何使用這種模式去實現(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
}

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

譯文鏈接: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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • .Net?Api?中使用Elasticsearch存儲文檔的方法

    .Net?Api?中使用Elasticsearch存儲文檔的方法

    Elasticsearch 是一個分布式、高擴展、高實時的搜索與數(shù)據(jù)分析引擎,在C# 的環(huán)境中,有一個Es的官方拓展包Nest,可以讓我們方便快捷的使用上Es數(shù)據(jù)庫,本文重點給大家介紹.Net?Api?中使用Elasticsearch存儲文檔的方法,感興趣的朋友一起看看吧
    2022-01-01
  • ASP.NET中Webservice安全 實現(xiàn)訪問權(quán)限控制

    ASP.NET中Webservice安全 實現(xiàn)訪問權(quán)限控制

    本文主要講解ASP.NET中的Webservice的安全設置兩種方法,一種基于soapheader,一種基于SoapExtensionAttribute,需要的朋友可以參考下。
    2016-05-05
  • DataReader不能使用using的詳細示例

    DataReader不能使用using的詳細示例

    這篇文章主要介紹了DataReader不能使用using的詳細示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • asp.net 驗證碼生成和刷新及驗證

    asp.net 驗證碼生成和刷新及驗證

    在.NET中新建一個Web項目,添加一個.ASPX頁面,取名VerifyCode.aspx, 轉(zhuǎn)到其代碼編輯狀態(tài),將下面的代碼Copy&Paste過去就可以用了,有什么意見或問題歡迎提出^@^
    2009-10-10
  • asp.net輸出重寫壓縮頁面文件實例代碼

    asp.net輸出重寫壓縮頁面文件實例代碼

    這篇文章主要介紹了asp.net輸出重寫壓縮頁面文件實例代碼,需要的朋友可以參考下
    2014-02-02
  • Asp.Net Mvc2 增刪改查DEMO代碼

    Asp.Net Mvc2 增刪改查DEMO代碼

    接觸mvc也有一段時間了(2.0),也看到園子里很多人在學習,自己也在園子里面看過前輩們寫的博客,確實受益匪淺。本文寫的都是基礎(chǔ)中的基礎(chǔ),僅供想學習MVC的新手們?nèi)腴T之作
    2012-10-10
  • asp.net mvc 從數(shù)據(jù)庫中讀取圖片的實現(xiàn)代碼

    asp.net mvc 從數(shù)據(jù)庫中讀取圖片的實現(xiàn)代碼

    今天搞了一天的MVC,在顯示圖片的時候老是出現(xiàn)問題,從網(wǎng)上搜索了好久,才找到解決方法。
    2010-05-05
  • ASP.NET Core中使用MialKit實現(xiàn)郵件發(fā)送功能

    ASP.NET Core中使用MialKit實現(xiàn)郵件發(fā)送功能

    這篇文章主要介紹了ASP.NET Core中使用MialKit實現(xiàn)郵件發(fā)送功能,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • asp.net 動態(tài)生成rdlc報表(原創(chuàng))

    asp.net 動態(tài)生成rdlc報表(原創(chuàng))

    因為公司需求 研究微軟的Reportviewer 因為有許多特別要求所以動態(tài)調(diào)用 比較靈活 我的需求是 根據(jù)數(shù)據(jù)不同的合并表頭 (參考了隨心所欲的博客文檔 再次表示感謝)
    2011-12-12
  • .NET8.0發(fā)布到IIS的實現(xiàn)步驟

    .NET8.0發(fā)布到IIS的實現(xiàn)步驟

    很多學習.Net的朋友初次接觸并不知道一個.Net應用怎么發(fā)布到IIS服務器中去,本文主要介紹了.NET8.0發(fā)布到IIS的實現(xiàn)步驟,感興趣的可以了解一下
    2024-05-05

最新評論