【问题标题】:ASP.NET MVC routing parameterASP.NET MVC 路由参数
【发布时间】:2011-12-20 11:50:07
【问题描述】:

asp.net mvc 路由模式是

 {"some_parameter/{controller}/{action}/{id}"}

如果some_parameter 可以为空或字符串为空,这是一种有效的格式吗

【问题讨论】:

  • 更新了路线的顺序,使其能够正常工作。如果将此路由放在默认路由之前,它将不起作用。
  • @Nario,您能否更深入地了解您想要通过此实现的目标?只是好奇。因为这是额外的复杂性,无论如何您都必须处理约束。

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-2 asp.net-mvc-routing


【解决方案1】:

我相信你想要的是{some_parameter}/{controller}/{action}/{id}(注意“some_parameter”周围的花括号),在这种情况下,我认为它不应该为空或空。如果some_parameter 为空,您认为您的最终 URL 看起来如何与路由匹配? “mysite.com//mycontroller/myaction/myid”?

路由引擎只匹配模式。如果您想同时处理{some_parameter}/{controller}/{action}/{id}{controller}/{action}/{id},只需定义两个路由即可。

【讨论】:

  • 这样创建两条路线是行不通的,因为第一个参数没有默认值。有相同的解决方案,但在您提到后将其删除。
  • 我也是这么想的。他需要正则表达式来匹配模式,如果你能很快的话。
  • @Nario 我真的认为如果您按该顺序创建路由,这将不起作用,因为您永远不会点击第二个(默认路由)
  • @Craig,是的,当然,你需要约束,因为否则(因为我们有 id 作为可选)在许多情况下,可能会有像 mysite.com/hello/crazy/world/ 这样的模棱两可的 URL,它会匹配两个路由并且会占用第一个默认定义。即使在这里订购也无济于事,因为您可能有 2 个非常相似的 URL,并希望它们匹配不同的路由。
  • @VasilioRuzanni 如果缺少 some_parameter 的意图是匹配第一条路线,则排序将有所帮助。根据提出的问题,我认为这是他们可能的意图,但问题中的更多信息可能会提供更好的答案。
【解决方案2】:

编辑

我刚刚重新排序了路由注册以便它可以工作:

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new {
        controller = "home",
        action = "index",
        id = UrlParameter.Optional }
);

routes.MapRoute(
    "Default", // Route name
    "{some_parameter}/{controller}/{action}/{id}", // URL with parameters
    new {
        some_parameter = UrlParameter.Optional,
        controller = "home",
        action = "index",
        id = UrlParameter.Optional
    }
);

他们应该按这个顺序注册。此外,第二条路线需要一个 id 和 some_parameter 参数,否则它将永远不会因为之前的路线而被击中。即使 some_parameter 和 id 参数设置为可选,这永远不会发生,因为如果它是空的,之前的路由会捕获它。

【讨论】:

  • some_parameter 没有默认值。它是例如控制器 "home" 的动态数据,但对于 some_parameter 我必须设置为空。
  • 订购在这里没有帮助。您可能有 2 个 URL 应该匹配不同的路由。只有约束才能解决这个问题(如果可以的话)。
  • @VasilioRuzanni 我相信确实如此。正如我解释的那样,他对这个解决方案的限制是第二条路线必须设置 some_parameter 和 id。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-12
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 2011-11-22
  • 1970-01-01
相关资源
最近更新 更多