没有controllerName的网址

时间:2013-10-23 11:59:21

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

我想隐藏URL中的控制器名称。我使用以下代码。

routes.MapRoute(
    name: "Customized",
    url: "{action}",
    defaults: new { controller = "Home", action = "Default", id = UrlParameter.Optional }
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Default", id = UrlParameter.Optional }
);

这完全有效。

但仅在我输入

时才有效
http :// domain/ActionName

否则,我仍然可以看到

http :// domainname/controller/action

即使用户尝试输入

,也有http ://domain/ActionName的方式
http :// domainname/controller/action

2 个答案:

答案 0 :(得分:2)

如果你只有一个Controller(Home),我想你只能有一个路由定义(假设你的所有动作共享相同的参数模式):

routes.MapRoute(
    name: "Customized",
    url: "{action}/{id}",
    defaults: new { controller = "Home", action = "Default", id = UrlParameter.Optional }
);

答案 1 :(得分:0)

你可能会做一些hacky,比如一旦你进入动作检查实际路径,如果它不是正确的路径,然后重定向到正确的路径,但技术上会导致两个请求,如果经常做足够的话可能会锤击你的服务器

MVC路由采用短路逻辑将请求路径与适当的操作相匹配。它并不关心用户应该使用的“更好”路线,它只关心它找到匹配。