Asp.net MVC4强制路由参数

时间:2014-06-18 10:36:19

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

我有像这样的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.我知道我们可以通过null检查控制器中的参数来实现这一点。有没有办法在路由配置中管理它。

  

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

     

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

3 个答案:

答案 0 :(得分:0)

您应该在web.config中处理此问题,而不是在路由中。

答案 1 :(得分:0)

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

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]+)" }
        );

请注意,您在问题中提供的路线应符合您当前的规则,因此我会仔细检查您的控制器,操作和拼写,以防某处出现错字。

答案 2 :(得分:0)