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

时间:2009-04-23 15:46:08

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

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

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

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

我该如何做到这一点?

4 个答案:

答案 0 :(得分:9)

只需将路径中使用的URL更改为指向现有控制器即可。在你的Global.asax中:

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

您需要配置路由。在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动作不需要指定。如果网址错过.../sent部分,则默认为Index操作。

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

答案 3 :(得分:0)

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

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