我创建了一个新的ASP.NET MVC项目,并实现了一个站点授权过滤器。
当我将路由映射到角色对时,我向路由传递了一个{controller}/{action}
= "SomeRole“默认值。
如果我遍历完整的url (http://localhost/somecontroller/someaction
)并指定完整的路由,它就能完美地工作
MapRoute("SomeAction", "somecontroller/someaction",
new { controller = "SomeController", action = "SomeAction", role = "SomeRole");
问题是当有人访问http://thesiteaddress.com
时,必须有一个调用/home/index
而不是/
的默认路由,如果我指定
MapRoute("Default", new { controller="somecontroller",action="action" });
然后,我丢失了前一个MapRoute
中的role="SomeRole"
。
我该如何解决这个问题呢?
发布于 2009-06-24 03:18:17
实际上,是George is right。MVC路由尊重排序路由。您的最后一条路由必须尽可能是通用的,而您之前的路由必须尽可能具体。
在您的例子中,两者都是通用的。你应该
MapRoute("SomeAction", "Post/{action}", new {controller = "Post", role = "User");
然后
MapRoute("Default", new {controller="Home", action="Index", role = "Anonymous"});
因此,您指定了这两条路径的特异性。
发布于 2009-06-10 12:18:32
Phil Haack released,这是一个路由调试工具,对于理解这样的问题非常有价值。
使用此工具,您可以查看MVC应用程序如何解析URL并将其与您的RouteTable进行匹配。
发布于 2009-06-10 01:08:50
如果您没有提供路由名称,或者操作是通过HTTP请求确定的,那么它将按照添加它们的顺序进行查找。当它第一次找到一个匹配项时,它会停止。因此,可能发生的情况是,它将之前的一个匹配到您添加的那个。
https://stackoverflow.com/questions/973205
复制相似问题