MVC路由可以处理的参数数量是否有限制?

时间:2017-05-26 02:17:30

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

我正在使用MVC区域编写MVC应用程序。目前,我们在显示区域使用以下路线:

public override void RegisterArea(AreaRegistrationContext context) 
{
    context.MapRoute(
        "Display_default",
        "Display/{controller}/{action}/{id}/{id2}/{id3}/{*id4}",
        new { action = "Index", id = UrlParameter.Optional , id2 = UrlParameter.Optional, id3 = UrlParameter.Optional }
    );
}

这很有效。但是我们发现需要一个带有6个参数的控制器动作:

public ActionResult _MyMethod(string id, string id2, string id3, string id4, string id5, string id6)

我们发现我们可以添加当前设置,但是在第四个ID之后的url中的任何参数都被连接到第4个id参数。

我们试图扩展路线以接受我们需要的参数数量:

public override void RegisterArea(AreaRegistrationContext context) 
{
    context.MapRoute(
        "Display_default",
        "Display/{controller}/{action}/{id}/{id2}/{id3}/{id4}/{id5}/{*id6}",
        new { action = "Index", id = UrlParameter.Optional , id2 = UrlParameter.Optional, id3 = UrlParameter.Optional }
    );
}

但是,使用此路线不再加载页面。

MVC路由是否对它可以映射到的参数数量有某种CAP?我们还发现,如果我们将映射参数的数量缩减为id,id2和id3,它将再次起作用,并将所有溢出连接到id3。

有没有人有这方面的任何信息?

1 个答案:

答案 0 :(得分:1)

ASP.NET MCV对参数数量没有限制。

在你的情况下

public override void RegisterArea(AreaRegistrationContext context) 
{
   context.MapRoute(
      "Display_default",
      "Display/{controller}/{action}/{id}/{id2}/{id3}/{id4}/{id5}/{*id6}",
       new { action = "Index", id = UrlParameter.Optional , id2 = UrlParameter.Optional, id3 = UrlParameter.Optional }
   );
}

变量 id 是可选的,但 id4 是必需的。您必须在最后添加可选参数。

 routes.MapRoute(
      name: "Default",
      url: "{controller}/{action}/{id5}/{id6}/{id}/{id2}/{id3}/{*id4}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, id2 = UrlParameter.Optional, id3 = UrlParameter.Optional, id4 = UrlParameter.Optional, id5 = UrlParameter.Optional , id6 = UrlParameter.Optional }
);

或者将所有参数设为可选

routes.MapRoute(
      name: "Default",
      url: "{controller}/{action}/{id}/{id2}/{id3}/{id4}/{id5}/{*id6}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, id2 = UrlParameter.Optional, id3 = UrlParameter.Optional, id4 = UrlParameter.Optional, id5 = UrlParameter.Optional }
 );