Я перенес свой базовый проект веб-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();
}
}
}
}
Как я могу разрешить мой анонимный запрос в моем проекте ?
Пожалуйста, дайте мне знать, если кто-нибудь сталкивался с этой проблемой.
С уважением, Партибан.