在MVC中使用AuthorizeAttribute的子类

本文关键字:AuthorizeAttribute 子类 MVC | 更新日期: 2023-09-27 18:21:56

我正在尝试修改MVC中Controller方法的[Authorize]标记。我发现了一个许多人声称有效的例子。这是代码:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class AuthorizeRedirect : AuthorizeAttribute
{
    private const string IS_AUTHORIZED = "isAuthorized";
    public string RedirectUrl = "~/error/unauthorized";
    protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext)
    {
        bool isAuthorized = base.AuthorizeCore(httpContext);
        httpContext.Items.Add(IS_AUTHORIZED, isAuthorized);
        return isAuthorized;
    }
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        base.OnAuthorization(filterContext);
        var isAuthorized = filterContext.HttpContext.Items[IS_AUTHORIZED] != null
            ? Convert.ToBoolean(filterContext.HttpContext.Items[IS_AUTHORIZED])
            : false;
        if (!isAuthorized && filterContext.RequestContext.HttpContext.User.Identity.IsAuthenticated)
        {
            filterContext.RequestContext.HttpContext.Response.Redirect(RedirectUrl);
        }
    }
}

我在HomeController类中添加了这段代码作为Class,并将标记添加到一个方法中:

 [AuthorizeRedirect]
public ActionResult Devices()
{
    return View();
}

当我尝试以未授权的身份进入"设备"视图时,我不会被重定向到/error/unighted。我会被重定向到带有returnurl参数的常规帐户/登录名。

我做错了什么?

在MVC中使用AuthorizeAttribute的子类

从代码中删除此行:基础OnAuthorization(filterContext);

相关文章:
  • 没有找到相关文章