91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Route怎么在ASP.NET Core中使用

發布時間:2021-01-25 16:00:08 來源:億速云 閱讀:242 作者:Leah 欄目:開發技術

本篇文章為大家展示了Route怎么在ASP.NET Core中使用,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

創建 Controller 類

創建一個 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 類代碼,你會發現兩個 Action 方法的 Route 路徑都有 Default 前綴,這就不優雅了,優化方式就是把 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 會有一些對參數的約定,比如下面的代碼:

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

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

使用 Route 約束

Route 約束 就是 Controller 前的一個防火墻,他會踢掉一些不合規范的 Action 請求,比如說:你要求某個 Action 接收的參數必須是 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 中使用可選參數

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

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

有一點非常重要,當你使用了 Route特性 之后,其實 Controller 或者 Action 的名字就不再重要了,因為 Route處理引擎 已經不再將其作為參考選項,下面的代碼片段展示了如何在 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 中的參數使用多個約束

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

[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 的最大數和最小數

  • minlength 限定 string 的最小長度

  • regex 限定符合的正則

創建自定義的 Route 約束

如果上面的一些約束不滿足你的要求,你完全可以為你的場景深度定制,做法就是使用 IRouteConstraint 接口并實現它的 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 去替換,下面的代碼展示了如何使用這種模式去實現。

[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怎么在ASP.NET Core中使用,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿勒泰市| 陇川县| 崇仁县| 龙游县| 丹巴县| 尼木县| 余庆县| 确山县| 丰城市| 曲松县| 浮梁县| 静海县| 沁阳市| 酒泉市| 托里县| 洪泽县| 横山县| 抚顺市| 德化县| 龙山县| 电白县| 屏南县| 县级市| 贺兰县| 张家川| 呼伦贝尔市| 鄂州市| 柳江县| 会理县| 洪江市| 茌平县| 曲沃县| 泽库县| 临武县| 托里县| 金堂县| 尚志市| 张掖市| 厦门市| 平乐县| 阜康市|