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 :// domainname/controller/action

http ://domain/ActionName即使用户尝试输入,有什么办法吗

http :// domainname/controller/action
4

2 回答 2

2

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

routes.MapRoute(
    name: "Customized",
    url: "{action}/{id}",
    defaults: new { controller = "Home", action = "Default", id = UrlParameter.Optional }
);
于 2013-10-23T12:28:02.783 回答
0

一旦进入操作,您可能会做一些骇人听闻的事情,例如检查实际路径,如果它不是正确的路径,则重定向到正确的路径,但这在技术上会导致两个请求,并且如果执行得足够频繁,可能会破坏您的服务器。

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

于 2013-10-23T14:14:13.643 回答