我最近被要求修改一个小的asp.net mvc应用程序,使得url中的控制器名称包含破折号。例如,我创建了一个名为ContactUs的控制器,其中包含一个名为Index and Sent的视图,其中url将是http://example.com/ContactUs和http://example.com/ContactUs/Sent。要求我进行更改的人希望网址为http://example/contact-us和http://example.com/contact-us/sent。
我不相信我可以更改控制器的名称,因为' - '将是类名中的非法字符。
我正在寻找一个可以应用于控制器类的属性,它可以让我指定控制器在url中使用的字符串,但我还没有找到它。
我该如何做到这一点?
答案 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}
吗?如果可以,那么你可以替换所有“ - ”字符。