到目前为止(为简洁起见),我在 global.asax 中注册了一条路线,如下所示:
routes.Add(new LowercaseRoute("{action}/{id}", new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(new { controller = "Home", action = "Index", id = UrlParameter.Optional }),
DataTokens = rootNamespace
});
“rootNamespace”在哪里
var rootNamespace = new RouteValueDictionary(new { namespaces = new[] { "MyApp.Web.Controllers" } });
LowercaseRoute 继承自 Route 并且只是使所有路径小写。我也有一个这样注册的区域:
context.Routes.Add(new LowercaseRoute("admin/{controller}/{action}/{id}", new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(new { action = "List", id = UrlParameter.Optional }),
DataTokens = adminNamespace
});
其中 adminNamespace 是另一个命名空间,与默认路由中的想法相同,但具有正确的命名空间。这很好用,我可以访问如下所示的 URL:
http://example.com/contact <- default route, "Home" controller
http://example.com/admin/account <- area route, "Account" controller, default "List" action
问题是这
http://example.com/admin/home/contact
也有效。“管理”区域下没有带有“联系”操作的“家庭”控制器。它从“/contact”中提取正确的页面,但 URL 为“/admin/home/contact”。
有什么办法可以防止这种情况发生吗?
谢谢。