【问题标题】:How do you change the controller text in an ASP.NET MVC URL?如何更改 ASP.NET MVC URL 中的控制器文本?
【发布时间】:2009-04-23 15:46:07
【问题描述】:

我最近被要求修改一个小的 asp.net mvc 应用程序,以便 url 中的控制器名称包含破折号。例如,我创建了一个名为 ContactUs 的控制器,其视图名为 Index 和 Sent,url 将是 http://example.com/ContactUshttp://example.com/ContactUs/Sent。要求我进行更改的人希望网址为 http://example/contact-ushttp://example.com/contact-us/sent

我不相信我可以更改控制器的名称,因为“-”将是类名中的非法字符。

我正在寻找一个可以应用于控制器类的属性,它可以让我指定控制器在 url 中使用的字符串,但我还没有找到。

我怎样才能做到这一点?

【问题讨论】:

  • 设置路由规则很有效,而且是最简单的。我希望可以在控制器类中放置一些东西,以便设置靠近控制器,而不是位于其他开发人员可能不会注意到的不同位置。这也使旧路线 /ContactUs/ 仍然有效。可能会看看我是否可以让 iis7 url 重写器进行 perm 重定向。非常感谢您的帮助!
  • 乐于助人。欢迎来到本站!

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


【解决方案1】:

只需将路由本身使用的 URL 更改为指向现有控制器。在您的 Global.asax 中:

routes.MapRoute(
  "Contact Us",
  "contact-us/{action}/",
  new { controller = "ContactUs", action = "Default" }
);

【讨论】:

  • 看起来不错。这(和理查德的回答)可能是一个很好的解决方案。
  • 不完全是 Zack 设想的解决方案的“方式”,而是一种更有效的解决方案,我相信。这样,就无需为了友好的 URL 而改变控制器名称。
【解决方案2】:

我不相信您可以更改控制器的显示名称。在测试版中,控制器是使用带有“控制器”后缀的路由数据“控制器”创建的。这可能在 RC/RTM 中有所改变,但我不确定。

如果您创建自定义路由“contact-us/{action}”并指定默认值:new { controller = "ContactUs" },您应该会得到您想要的结果。

【讨论】:

    【解决方案3】:

    您需要配置路由。在您的 Global.asax 中,执行以下操作:

    public static void RegisterRoutes(RouteCollection routes)
    {
      ...
      routes.MapRoute(
        "route-name", "contact-us/{action}", // specify a propriate route name...
        new { controller = "ContactUs", action = "Index" }
      );
      ...
    

    正如 Richard Szalay 所指出的,sent 操作不需要指定。如果 url 缺少 .../sent 部分,它将默认为 Index 操作。

    请注意,当您将路由添加到RouteCollection 时,路由的顺序很重要。将选择第一个匹配的路由,其余的将被忽略。

    【讨论】:

    • 如果您将 /{action} 附加到第一个路径,则不需要您的第二个路径。
    【解决方案4】:

    其中一位 ASP.NET MVC 开发人员介绍了 Iconic 所谈论的内容。这是我今天在haacked 看到的东西。值得检查一下 MVC 架构中的自定义路由。

    编辑:啊,我明白了,您可以使用自定义路由,但在这种情况下这可能不是最好的解决方案。除非在映射之前有办法处理{controller}?如果可能,那么您可以替换所有“-”字符。

    【讨论】:

    • 我不确定那篇文章是否与他的要求有关。
    • 干杯 - 你可以说这是一天的结束,我没有正确阅读内容!
    猜你喜欢
    • 2016-01-25
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    相关资源
    最近更新 更多