【问题标题】:ASP.Net MVC Routing Empty Default ParameterASP.Net MVC 路由空默认参数
【发布时间】:2012-09-12 20:46:49
【问题描述】:

总结:

我正在审查我最近开始工作的网站的路线图。我遇到了一条我不熟悉的路线:

RouteTable.Routes.MapRoute(NamedRoutes.ROUTE_NAME, "urlSegment1/urlSegment2", new { });

请注意,MapRoute 的“默认”参数是一个空对象。这通常是我指定控制器、操作和任何参数的地方。我一直在谷歌搜索,发现我没有提出正确的问题来产生我正在寻找的答案。

问题:

当 MapRoute 的“defaults”参数为空对象时,MVC 路由的行为如何?一个答案会很棒。支持文档会更好。

编辑:

实际使用的路线是:

routes.MapRoute(NamedRoutes.BROWSE_MEN, "browse/Mens", new { } });

使用以下方法生成 URL 时出现问题:

Html.BeginForm("Add", "Signup", FormMethod.Post, new { id = "signup", enctype = "multipart/form-data" })

【问题讨论】:

  • 该路线实际上有效吗?我几乎认为这是杀死以前使用的路线的一种方式。
  • 它有效,是的。但是,我遇到的问题是,我期望一条路线被映射到该路线下方。我发现这条路线下方的任何东西都没有受到打击,并且所有东西都被这条路线抓住了。
  • 也许你需要的是一个约束而不是默认
  • 将此路线移至底部。看起来它可能打算成为一条包罗万象的路线
  • @Brian。我同意它是一个包罗万象的工作。我只是想了解它是如何工作的。更具体地说,为什么 ABC/DEF 的入站请求会命中 urlSegment1/urlSegment2 的路由模式?

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


【解决方案1】:

它们被映射为stings,在这种情况下匹配所有内容。仅当 URL 未提供控制器/操作参数之一时,才存在默认值。在这种情况下,没有任何默认值是没有意义的。它实际上正在捕获所有字符串/字符串。

【讨论】:

    【解决方案2】:

    您拥有的路由将匹配一个请求,该请求恰好包含 url ex 中的两个段。 http://localhost/urlSegment1/urlSegment2 并返回 404。我猜你已经定义了这个路由以避免以下路由处理这个请求。

    【讨论】:

      【解决方案3】:

      当您没有指定控制器时,无论是作为 URL 参数(令牌)还是默认值,您都应该得到一个 InvalidOperationException:

      匹配的路由不包含“控制器”路由值,它 是必需的。

      动作也一样。那是针对传入的请求。对于 URL 生成,不需要控制器或操作。

      【讨论】:

        【解决方案4】:

        您不必指定默认值。

        所以它就像没有指定默认对象一样工作

        【讨论】:

        • 所以,我应该期望框架寻找一个名为“urlSegment1”的控制器?
        • 没有。这里根本没有设置控制器。这条路线不应该做任何事情。如果您希望 segment1 成为您的控制器,您可以输入 {Controller}/segment2
        • 好的,谢谢。但是,这并不能解释为什么 ABC/DEF 的入站请求会遇到 urlSegment1/urlSegment2 的路由模式。
        猜你喜欢
        • 2010-11-01
        • 2017-07-08
        • 1970-01-01
        • 1970-01-01
        • 2011-08-01
        • 2017-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多