MVC5 属性路由正则表达式没有产生预期的结果

3 asp.net-mvc

我使用了两个正则表达式,一个将第一个参数(年份)限制为 4 位数字,第二个(月份)将第二个参数限制为 2 位数字。

[Route("movies/released/{year:regex(\\d{4})}/{month:regex(\\d{2}):range(1, 12)}")]
public ActionResult ByReleaseDate(int year, int month)
{
    return Content($"{year}/{month}");
} 
Run Code Online (Sandbox Code Playgroud)

这部分有效,当我导航到/movies/released/2017/13 时,我看到了 404。

但是当我导航到/movies/released/200017/03 时,不会产生 404。

Dan*_*tru 5

您的年份正则表达式在任何地方都匹配 4 位数字,但不要求它仅为 4 位数字。你应该使用

{year:regex(^\\d{4}$)}
Run Code Online (Sandbox Code Playgroud)

^$标记字符串的开始和结束。另请参阅:特定位数的正则表达式