Asp.net mvc 如何更改ASP.NET MVC URL中的控制器文本?

Asp.net mvc 如何更改ASP.NET MVC URL中的控制器文本?,asp.net-mvc,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc Routing,我最近被要求修改一个小型asp.net mvc应用程序,以便URL中的控制器名称包含破折号。例如,我创建了一个名为ContactUs的控制器,其中包含一个名为Index的视图,并发送了URL。要求我进行更改的人希望URL是和 我不相信我可以更改控制器的名称,因为“-”在类名中是非法字符 我正在寻找一个可以应用于控制器类的属性,该属性允许我在url中指定控制器将使用的字符串,但我还没有找到 我如何才能做到这一点?我不相信您可以更改控制器的显示名称。在beta版中,控制器是使用带有“controll

我最近被要求修改一个小型asp.net mvc应用程序,以便URL中的控制器名称包含破折号。例如,我创建了一个名为ContactUs的控制器,其中包含一个名为Index的视图,并发送了URL。要求我进行更改的人希望URL是和

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

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


我如何才能做到这一点?

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


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

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

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

您需要配置路由。在您的
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
部分,它将默认为
索引
操作


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

一位ASP.NET MVC开发人员介绍了图标所说的内容。事实上,这是我今天看到的东西。在MVC体系结构中查看自定义路由是值得的


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

如果你在第一条路径上附加/{action},那么你的第二条路径就不需要了。我不确定那篇文章是否与他要求的内容有关。干杯-你可以告诉我,这是一天的结束,我没有正确地阅读东西!看起来不错。这(以及理查德的回答)可能是一个很好的解决方案。我相信这不是扎克设想的解决方案,而是一个更有效的解决方案。这样,就不需要为了友好的URL而更改控制器名称。设置路由规则很有效,而且是最简单的。我希望能在控制器类中加入一些东西,这样设置就可以靠近控制器,而不是位于其他开发人员可能不会注意到的其他位置。这也使得旧路线/联系方式/仍在工作。也许我能让iis7 url重写器做一个烫发重定向。非常感谢你的帮助!很乐意帮忙。欢迎来到这个网站!