ASP.NET MVC标识:多个登录路径并修改控制器中的默认登录路径

时间:2014-08-22 02:42:51

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

如何更改控制器的默认身份验证重定向路径(/ Account / Login)? 例如我有4个控制器

ABC - > / ABC /登录

BCD - > / BCD /登录

EFG - > / EFG /登录

首页--->帐户/登录

3 个答案:

答案 0 :(得分:7)

这是一个自定义的Authorize属性,根据Chris Pratt的想法:

public class CustomAuthorize:AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        string controller = filterContext.RouteData.Values["controller"].ToString();
        filterContext.Result = new RedirectToRouteResult(new
        RouteValueDictionary(new{ controller = controller, action = "Login" }));
    }
}

可以在您的控制器上使用,如下所示:

[CustomAuthorize]
public class ABCController : Controller

这会将未经授权的客户端重定向到它尝试访问的控制器上的“登录”操作。请务必将[AllowAnonymous]放在您的登录操作上。

答案 1 :(得分:1)

您可以删除Authorize属性,然后在IsAuthenticated操作中查看Details。如果验证失败,则重定向到登录操作。

答案 2 :(得分:0)

根据这个答案 https://stackoverflow.com/a/20818754/2198830

使用新的OWIN表单身份验证(而不是旧的ASP.NET表单身份验证)时,这将在Startup类中设置。在默认模板中,它位于ConfigureAuth方法的App_Start/Startup.Auth.cs中:

public void ConfigureAuth(IAppBuilder app)
{
   app.UseCookieAuthentication(new CookieAuthenticationOptions
   {
      AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
      //here you can change the login url
      LoginPath = new PathString("/Account/Login")
   });
   app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
}