星期二, 2月 01, 2022

[WebApi Core] 路由限制 - 日期

學習 Attribute Routing 時,發現官方文章範例 - 使用 ASP.NET Web API 2 中的屬性路由建立 REST API 依發行日期取得書籍 還蠻有趣的,該範例重點是說明日期的路由限制要如何設定

路由限制:datetime
[HttpGet("date/{pubdate:datetime}")]
public IActionResult GetBooks(DateTime pubdate)
{
    return Ok("有效日期參數");
}

文章內有兩種特殊情況

情況一:參數為 01 Feb 2022 可以順利通過


情況二:參數為 2020/02/01 會被誤認為路由,而導致 404 NotFound


路由限制:Regex

除了 datetime 路由限制外,再加上 regex 來限定日期格式,以該範例來說,參數應為 2022-02-01,複合路由限制只要透過 : 符號串接就行
[HttpGet("date/{pubdate:datetime:regex(\\d{{4}}-\\d{{2}}-\\d{{2}})}")]
public IActionResult GetBooks(DateTime pubdate)
{
    return Ok("有效日期參數");
}
此時輸入 01 Feb 2022 就會變成 404 NotFound 囉


路由限制:參數有 / 符號

該範例最重要重點,要讓參數 2022/02/01 不會被解析為路由,必須在參數前加上 * 符號
[HttpGet("date/{pubdate:datetime:regex(\\d{{4}}-\\d{{2}}-\\d{{2}})}")]
[HttpGet("date/{*pubdate:datetime:regex(\\d{{4}}/\\d{{2}}/\\d{{2}})}")]
public IActionResult GetBooks(DateTime pubdate)
{
    return Ok("有效日期參數");
}

沒有留言:

張貼留言