如何配置global.config以允许MVC2中的根路径操作方法?

时间:2010-07-28 14:30:37

标签: asp.net-mvc-2

具体来说,默认目录命名结构是[Controller] / [ActionMethod],导致呈现的网址如www.mysite.com/home/actionMethodName。

如果我想简单地暗示Controller(在此示例中为'home'),以便我可以获得如下所示的URL:www.mysite.com/actionMethodName。

我没有看到很多这种配置的请求。我可以看到它如何破坏惯例,但我想会有很多人需要根路径。

2 个答案:

答案 0 :(得分:2)

像苹果派一样简单 - 您只需指定自己的路线! =)

一个例子:

routes.MapRoute(
    "RootPathing",
    "{action}",
    new { controller = "Default", action = "Index" });

这将注册捕获所有路径的路由,并尝试使用与路径对应的操作名称将它们映射到DefaultController。但请注意,如果您将此路线置于所包含的默认路线之上,则您将无法访问除DefaultController之外的任何其他控制器 - 因此,将此路线置于以下的默认路线连锁,链条。然后,它将与所有与控制器名称不匹配的路径匹配。 在调试路由时,Phil Haack's Routing Debugger非常值得一看。

答案 1 :(得分:2)

因为您打算删除网址的{controller}元素,您可能需要更加具体地了解其他网址,例如:

routes.MapRoute("MyOtherControllerRoute", "Account/{action}", new { controller = "Account", action = "Index" });
routes.MapRoute("MyDefaultRoute", "{action}", new { controller = "Home", action = "Index" });

当查询路由表时,如果使用了诸如www.mysite.com/Account之类的URL,它将匹配第一条路由,因为我们已经具体了解用于匹配网址的模式。如果我们然后执行类似www.mysite.com/DoSomething的操作,它将使用我们最后选择的默认路由,尝试在HomeController类型上调用DoSomething操作。

我注意到的一些事情是很多MVC开发人员似乎认为url是严格的{something}/{something}/{something},而它本质上可以是你喜欢的任何东西,例如,我可以有一条路线:{我可以专门绘制的{1}}:

www.mysite.com/my-weird-and-wonderful-url

希望有所帮助。