【问题标题】:Asp.net MVC4 mandatory route parameterAsp.net MVC4 强制路由参数
【发布时间】:2014-06-18 10:36:19
【问题描述】:

我有一个这样的 RouteConfig

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index"}
        );
    }
}

但是当我尝试使用“http://example.com/controllername/action/166699406”时。它得到下面的错误。我想要实现的是,我想让 id 参数成为强制性的。如果他们在 url 中没有 id 参数,它不应该到达路由并且应该显示 404。我知道我们可以通过检查控制器中的参数来实现这一点。有没有办法在路由配置本身中管理它。

路由表中没有路由与提供的值匹配。

异常详细信息:System.InvalidOperationException:路由表中没有路由与提供的值匹配。

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-4


    【解决方案1】:

    您应该在 web.confing 中而不是在路由中处理这个问题。

    <customErrors mode="On" defaultRedirect="/error/default">
      <error statusCode="403" redirect="/error/restricted"/>
      <error statusCode="404" redirect="/Default/DefaultRoute"/>
      <error statusCode="500" redirect="/error/problem"/>
    </customErrors>
    

    【讨论】:

      【解决方案2】:

      如果我理解正确,您想为路线添加约束

      constraints: new { id = @"([0-9]+)" }
      

      这意味着路由只会在 id 为数字时匹配,这是强制性的。

      全文:

      routes.MapRoute(
                  name: "Default",
                  url: "{controller}/{action}/{id}",
                  defaults: new { controller = "Home", action = "Index"},
                  constraints: new { id = @"([0-9]+)" }
              );
      

      请注意,您在问题中提供的路线应该与您当前的规则相匹配,因此我会仔细检查您的控制器、操作和拼写,以防某处只是拼写错误。

      【讨论】:

      【解决方案3】:
      猜你喜欢
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      • 2013-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-13
      相关资源
      最近更新 更多