2013-10-23 56 views
3

我想从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 ://domain/ActionName即使用户尝试键入

+1

您如何计划区分行动? –

+0

你只有一个控制器? ('HomeController') – jbl

+0

是的只有一个控制器 – Pankaj

回答

2

如果你只有一个控制器(Home),我想你只能有一个路径d efinition(假设你所有的行动共享相同的参数模式):

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

你可能会做一些哈克一旦你坐进行动,如果它不是在正确的道路像​​检查实际的路径,然后重定向到正确的路径,但技术上会导致两个请求,如果频繁执行,可能会导致服务器瘫痪。

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