MVC5属性路由正则表达式不产生所需的结果

时间:2017-08-25 13:26:37

标签: 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}");
} 

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

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

3 个答案:

答案 0 :(得分:4)

您的年度正则表达式在任何地方都匹配4位数,但并不要求它只有4位数。你应该使用

{year:regex(^\\d{4}$)}

^$标记字符串的开头和结尾。另请参阅:Regular expression for specific number of digits

答案 1 :(得分:1)

我知道这已经很老了,但是已经回答了,但是我认为分享可能会帮助访问者。 我正在观看Mosh here撰写的ASP .Net MVC5教程,发现他在“属性路由”部分提到了更正。以下对我有用。

[Route("movies/released/{year}/{month:regex(\\d{2}):range(1, 12)}")]

答案 2 :(得分:0)

使用

[Route("movies/released/{year}/{month:regex(\\d{{2}}):range(1, 12)}")]
代替{2}

在您的情况下,此方法可以Webp

说明::在路由参数中,必须用'{{'和'}}'对'{'和'}'进行转义。