您可以拥有多少个路由参数?

时间:2014-07-09 08:22:45

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

.NET MVC中可以有多少个路由参数? 像localhost:port / controller / action / parameter1 / parameter2 / parameter3 /等等

我目前正在使用此功能进行路由

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

这很有效。 但是当我在这个例子中添加另一个类似“extra3”的路由时,整个页面就会中断,普通的表单帖子等等就会停止工作。

你可以拥有的数量是否有限制,我应该选择正常的查询字符串吗?

被修改

进一步解释。 我想这样做

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

但是当我添加更多的路线/参数时,它只是不起作用。 您可以拥有多少限制?

1 个答案:

答案 0 :(得分:1)

HTML帮助程序,例如(Html.ActionLink, Html.Action, Html.BeginForm etc)在路径中有更多可选参数时会给出错误的结果。通常我们在路径末尾保留一个可选参数作为可选参数。

如果你保持路由配置如下,它将起作用。

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

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

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

}

阅读以下帖子中的“根本原因”部分,了解多个可选参数的问题。

http://haacked.com/archive/2011/02/20/routing-regression-with-two-consecutive-optional-url-parameters.aspx/

谢谢!