我的项目有问题:
每当我访问没有控制器/操作值的默认页面时,它会将我重定向到loginUrl 但是,如果我明确地传递控制器/动作,它不会 这正是问题所在:
如果我使用以下链接,则会转到登录页面:
http://mydomain/
但是,如果我使用它,它可以正常工作:
http://mydomain/Home/Index
这是我的路线代码:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapNavigationRoute<Controllers.HomeController>("Acerca de", a => a.About());
routes.MapNavigationRoute<Areas.Admin.Controllers.HomeController>("Admninistración", a => a.Index())
.AddChildRoute<Areas.Admin.Controllers.CompetidoresController>("Competidores", c => c.Index());
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new[] { "HarkDev.Apuestas.Web.Controllers" }
);
}
我的web.config身份验证:
<authentication mode="Forms" >
<forms loginUrl="~/Home/Login" timeout="2880" />
</authentication>
我的家庭控制器具有[授权]属性,但我的索引操作具有[AllowAnonymous]属性。
答案 0 :(得分:3)
很难说没有能够看到你的整个RouteConfig.cs,但你描述的行为根本不可能除非默认路线不是你想象的那样。换句话说,转到http://mydomain/
实际上并没有达到HomeController.Index
,但 所需的其他控制器/操作组合需要进行身份验证。
要记住两件事:
仅仅因为你命名路线&#34;默认&#34;,并不意味着它实际上是。路线名称并不重要。
MVC路由短路。换句话说,第一匹配路线MVC看到胜利。因此,您需要注意RouteConfig.cs中路由的顺序,并确保您没有多条路径可以匹配给定的网址模式。
例如:
routes.MapRoute(
"Foo",
"{controller}/{action}/{id}",
new { controller = "Foo", action = "Bar", id = UrlParameter.Optional }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
此处,http://domain.com/
的请求会点击FooController.Bar
,不会 HomeController.Index
。