Атрибут AllowAnonymous не работает в Asp. net Core 2.2 Web API - PullRequest
0 голосов
/ 20 апреля 2020

Я перенес свой базовый проект веб-API asp. net с версии 1.0.5 в версию 2.2. После миграции атрибут [AllowAnonymous] не работает в файле класса Middleware. Он выдаст 401 код несанкционированного состояния из самого промежуточного программного обеспечения.

public class AuthorizationMiddleware
{
    private readonly RequestDelegate next;       
    public AuthorizationMiddleware(RequestDelegate next)
    {
        this.next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        if (context.Request.Method == "OPTIONS")
        {
            await this.next.Invoke(context);
            return;
        }

        if (context.Request.Path.Value.Contains("swagger"))
        {
            await this.next.Invoke(context);
            return;
        }

        if (context.Request.Headers.Keys.Contains("Authorization"))
        {
            await this.next.Invoke(context);
            return;
        }
        else
        {
            context.Response.StatusCode = 401;
            return;
        }
    }
}
[Route("api/[controller]")]
[AuthorizationModel]
public class CentersController : Controller
{
     [AllowAnonymous]
     [HttpGet] 
     public async Task<IActionResult> GetCentersAsync()
     {

     }
}

AuthorizationModel

public class AuthorizationModelAttribute : ActionFilterAttribute 
{
    public override void OnActionExecuting(ActionExecutingContext context) 
    { 
       string controllerName = context.RouteData.Values["controller"].ToString();

            if (context.ActionDescriptor.FilterDescriptors.Any(x => x.Filter is AllowAnonymousFilter))
                return;

            bool isGlobalAdmin = UserRole.IsGlobalAdmin(context.HttpContext.User);
            bool isTerritoryUser = UserRole.IsTerritoryUser(context.HttpContext.User);
            bool IsAuthorizedCenterUser = UserRole.IsAuthorizedCenterUser(context.HttpContext.User);
            bool isFinanceManager = UserRole.IsFinanceManager(context.HttpContext.User);
            bool isGetClassAccessTypeForUser = UserRole.IsGetClassAccessTypeForUser(context.HttpContext.User);

            if (controllerName == Constants.CenterController
                || controllerName == Constants.CenterConfigController
                || controllerName == Constants.CenterHolidaysController)
            {
                if (!(isGlobalAdmin || isTerritoryUser || IsAuthorizedCenterUser))
                {
                    context.Result = new UnauthorizedResult();
                }
            }

            if (controllerName == Constants.CrossCenterGroupController)
            {
                if (!(isGlobalAdmin || isTerritoryUser))
                {
                    context.Result = new UnauthorizedResult();
                }
            }

            if (controllerName == Constants.FMSController)
            {
                if (!isGlobalAdmin || !isFinanceManager)
                {
                    context.Result = new UnauthorizedResult();
                }
            }

            if(controllerName == Constants.ClassAccessTypeController)
            {
                if (!(isGetClassAccessTypeForUser))
                {
                    context.Result = new UnauthorizedResult();
                }
            }
    } 
} 

Как я могу разрешить мой анонимный запрос в моем проекте ?

Пожалуйста, дайте мне знать, если кто-нибудь сталкивался с этой проблемой.

С уважением, Партибан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...