在身份2.0中重定向未授权用户

Isu*_*uru 6 asp.net-mvc authorize-attribute asp.net-mvc-5 asp.net-identity asp.net-identity-2

对于我的mvc5项目,我已经实现了默认身份,但根据要求进行了更改.现在我想将未经授权的用户重定向到我创建的视图.我创建了一个自定义授权过滤器.当未经授权的用户输入时,会进入我的错误视图.我可以通过URL识别它.但问题是它没有在视图中显示内容.相反,它显示HTTP 404错误.我把我的代码放在下面.我知道这里有好几次.但我仍然无法解决它.所有帮助赞赏.提前致谢!

public class CustomAuthorize : AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            base.HandleUnauthorizedRequest(filterContext);
        }
        else
        {
            filterContext.Result = new RedirectToRouteResult(new
            RouteValueDictionary(new { controller = "Error", action = "AccessDenied" }));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

ErrorController

public class ErrorController : Controller
{
    // GET: Error
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult AccessDenied()
    {
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

AccessDenied视图

<h2>AccessDenied</h2>

Access Denied
Run Code Online (Sandbox Code Playgroud)

在特定的控制器上

[CustomAuthorize(Roles = "Admin")]
public class ProductTypeController : Controller
{
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误

HTTP 404.您正在查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用.请查看以下网址,确保拼写正确.

更新的问题

现在我想将未授权用户重定向到ErrorView和Unauthenticated用户登录页面.我在下面放了我修改过的CustomAuthorise.但它不起作用.请指导我..

public class CustomAuthorize : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        if (!httpContext.Request.IsAuthenticated)
            return false;
        else 
            return true;
    }
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        filterContext.Result = new RedirectToRouteResult(new
        RouteValueDictionary(new { controller = "Error", action = "AccessDenied" }));
    }
} 
Run Code Online (Sandbox Code Playgroud)

Sam*_*ari 11

对于重定向未授权用户,您无需自定义AuthorizeAttribute.只需在Startup.ConfigureAuth(IAppBuilder app)方法或您的自定义OWIN启动方法中添加以下行:

public void ConfigureAuth(IAppBuilder app)
{
    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
        AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
        LoginPath = new PathString("/Error/AccessDenied"),
    });
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您想要区分未经身份验证的用户和未经授权的用户.像这样编写自定义过滤器:

public class MyAuthAttribute: AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if(filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            filterContext.Result = new RedirectResult("/Error/AccessDenied");
        }
        else
        {
            base.HandleUnauthorizedRequest(filterContext);
        }        
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以在OWIN启动方法中添加登录URL:

LoginPath = new PathString("/Account/Login")
Run Code Online (Sandbox Code Playgroud)