我想隐藏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
答案 0 :(得分:2)
如果你只有一个Controller(Home
),我想你只能有一个路由定义(假设你的所有动作共享相同的参数模式):
routes.MapRoute(
name: "Customized",
url: "{action}/{id}",
defaults: new { controller = "Home", action = "Default", id = UrlParameter.Optional }
);
答案 1 :(得分:0)
你可能会做一些hacky,比如一旦你进入动作检查实际路径,如果它不是正确的路径,然后重定向到正确的路径,但技术上会导致两个请求,如果经常做足够的话可能会锤击你的服务器
MVC路由采用短路逻辑将请求路径与适当的操作相匹配。它并不关心用户应该使用的“更好”路线,它只关心它找到匹配。