У меня была похожая проблема перенаправления. В моем случае я хочу перенаправить пользователей в представление «у вас нет прав» при сбое AuthorationHandler. Я применил следующий код, в частности (httpContext.Response.Redirect (...)) в (. Net Core 3.1), чтобы направить меня к действию NoPermissions на домашнем контроллере.
В классе обработчика:
protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, FooBarRequirement requirement) {
var hasAccess = await requirement.CheckAccess(context.User);
if (hasAccess)
context.Succeed(requirement);
else {
var message = "You do not have access to this Foobar function";
AuthorizeHandler.NoPermission(mHttpContextAccessor.HttpContext, context, requirement, message);
}
}
Я написал класс c stati для обработки перенаправления, передав URL-адрес, ожидаемый контроллером и действием, а также сообщение об ошибке и постоянный флаг перенаправления установлен в true:
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
namespace Foo.BusinessLogic.Security {
public static class AuthorizeHandler {
public static void NoPermission(HttpContext httpContext,
AuthorizationHandlerContext context, IAuthorizationRequirement requirement, string
errorMessage) {
context.Succeed(requirement);
httpContext.Response.Redirect($"/home/nopermission/?m={errorMessage}", true);
}
}
}
Наконец, контроллер и действие, которое обрабатывает представление и сообщение
[AllowAnonymous]
public IActionResult NoPermission(string m) {
return View("NoPermission", m);
}
}