首页 > 解决方案 > 如何在 ASP.NET Core 3.1 中扩展 Authorize 属性的逻辑?

问题描述

我正在开发一个 ASP.NET Core MVC 应用程序,我希望能够更好地处理未经身份验证的用户通过 AJAX 运行操作时发生的情况。

我发现这个解决方案本质上扩展了Authorize属性的逻辑并将 AJAX 请求的状态代码设置为401用户不再经过身份验证的时间。状态代码返回到全局 AJAX 错误处理程序,并且可以执行适当的操作。

我正在尝试在 Core 3.1 中创建属性,但我找不到首先运行过滤器基本逻辑的方法。base.OnAuthorization方法不存在。我特别不想重写Authorize属性的功能 - 只是为了扩展它。

如何Authorize在 Core 3.1 中扩展属性的逻辑?

我正在写的授权属性:

public class AuthorizeUserAttribute : AuthorizeAttribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationFilterContext context)
    {
        base.OnAuthorization(context); //method does not exist
        OnAjaxAuthorization(context);
    }

    internal void OnAjaxAuthorization(AuthorizationFilterContext context)
    {
        if (context.HttpContext.User.Identity.IsAuthenticated == false)
        {
            if (context.HttpContext.Request.IsAjaxRequest())
            {
                context.HttpContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
            }
        }
    }
}

顺便说一句,我正在考虑编写一个ActionFilterAttribute来运行附加代码,但我不能这样做,因为该Authorize属性总是首先运行。

标签: asp.net-core-mvcasp.net-core-3.1authorize-attribute

解决方案


推荐阅读