3

我最近被要求修改一个小的 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 中使用的字符串,但我还没有找到。

我怎样才能做到这一点?

4

4 回答 4

9

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

routes.MapRoute(
  "Contact Us",
  "contact-us/{action}/",
  new { controller = "ContactUs", action = "Default" }
);
于 2009-04-23T15:52:56.770 回答
2

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

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

于 2009-04-23T15:52:09.253 回答
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不需要指定操作。如果 url 错过了该.../sent部分,它将默认为该Index操作。

请注意,当您将路由添加到RouteCollection. 将选择第一个匹配的路由,其余的将被忽略。

于 2009-04-23T15:55:30.647 回答
0

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

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

于 2009-04-23T15:56:09.010 回答