【问题标题】:MVC5 attribute routing regular expression not producing desired resultMVC5 属性路由正则表达式未产生预期结果
【发布时间】:2021-06-29 15:09:23
【问题描述】:

我使用了两个正则表达式,一个将第一个参数(年份)限制为 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。

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

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

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

    ^$ 标记字符串的开始和结束。另见:Regular expression for specific number of digits

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我正在看相同的教程,但这对我不起作用
      【解决方案3】:

      使用 {{2}} 代替 {2}

      在您的情况下,这将起作用[Route("movies/released/{year}/{month:regex(\\d{{2}}):range(1, 12)}")]

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

      【讨论】:

        猜你喜欢
        • 2012-03-12
        • 1970-01-01
        • 2022-11-02
        • 1970-01-01
        • 2015-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多