默认页面重定向到登录 - MVC 4

时间:2014-05-05 19:28:00

标签: asp.net-mvc asp.net-mvc-4 forms-authentication

我的项目有问题:

每当我访问没有控制器/操作值的默认页面时,它会将我重定向到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]属性。

1 个答案:

答案 0 :(得分:3)

很难说没有能够看到你的整个RouteConfig.cs,但你描述的行为根本不可能除非默认路线不是你想象的那样。换句话说,转到http://mydomain/实际上并没有达到HomeController.Index,但 所需的其他控制器/操作组合需要进行身份验证。

要记住两件事:

  1. 仅仅因为你命名路线&#34;默认&#34;,并不意味着它实际上是。路线名称并不重要。

  2. MVC路由短路。换句话说,第一匹配路线MVC看到胜利。因此,您需要注意RouteConfig.cs中路由的顺序,并确保您没有多条路径可以匹配给定的网址模式。

  3. 例如:

    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