我使用了两个正则表达式,一个用于将第一个参数(年份)限制为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.
答案 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
说明::在路由参数中,必须用'{{'和'}}'对'{'和'}'进行转义。