具体来说,默认目录命名结构是[Controller] / [ActionMethod],导致呈现的网址如www.mysite.com/home/actionMethodName。
如果我想简单地暗示Controller(在此示例中为'home'),以便我可以获得如下所示的URL:www.mysite.com/actionMethodName。
我没有看到很多这种配置的请求。我可以看到它如何破坏惯例,但我想会有很多人需要根路径。
答案 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
希望有所帮助。