ASP.Net Core MVC 日期时间参数

Nat*_*sea 2 asp.net-core-mvc

我想分享我如何在 .NET Core MVC 控制器中使用 DateTime 参数。我用它在我的解决方案中创建了日期范围过滤器功能。

不正确

[HttpGet, Route("dateRange/{start}/{end}")]
public IActionResult Get(DateTime start, DateTime end)
{
    //invalid values (e.g. /bogus/52) get converted to a valid DateTime value of 1/1/0001 00:00:00.001
    if (start != DateTime.MinValue && end != DateTime.MinValue)
    {            
        if (start < end)
        {
            return Json(_Repo.GetByDateRange(start, end));
        }
    }
    return BadRequest("Invalid Date Range");
}
Run Code Online (Sandbox Code Playgroud)

Nat*_*sea 5

更好的方法:

[HttpGet, Route("dateRange/{start:datetime}/{end:datetime}")]
public IActionResult Get(DateTime start, DateTime end)
{            
    if (start < end)
    {
        return Json(_Repo.GetByDateRange(start, end));
    }
    return BadRequest("Invalid Date Range");
}
Run Code Online (Sandbox Code Playgroud)

关键是路由注释中的 :datetime 约束。这指示 .NET 强制执行 DateTime 并针对无效参数值自动返回 404 响应。这比在代码中检查输入和处理错误响应要干净得多。