【发布时间】:2017-10-26 19:35:56
【问题描述】:
我正在使用 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)
我们发现我们可以将其添加到当前设置中,但是 URL 中第四个 id 之后的任何参数都只是连接到第四个 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。
有人知道这方面的信息吗?
【问题讨论】:
-
您可以拥有任意多个(直到超出查询字符串限制并引发异常)。但是只有最后一个参数可以标记为
UrlParameter.Optional -
好的,那么在我上面的例子中,为什么它不允许我需要的 6 个参数?
-
你删除了所有的
UrlParameter.Optional。为什么你用{*id6}标记第6个?
标签: c# asp.net-mvc-5 routing