C# .NET Core 3.0 RouteEndpoint-如何返回RedirectToActionResult?

C# .NET Core 3.0 RouteEndpoint-如何返回RedirectToActionResult?,c#,httpcontext,asp.net-core-3.0,.net-core-3.0,asp.net-authorization,C#,Httpcontext,Asp.net Core 3.0,.net Core 3.0,Asp.net Authorization,使用.NET Core 3.0-它不支持AuthorizationFilterContext,当身份验证失败时,我需要将用户重定向到错误页面 AuthHandlerCode:- public class CheckADGroupHandler : AuthorizationHandler<CheckADGroupRequirement> { private readonly IHttpContextAccessor _httpContextAccessor; publi

使用.NET Core 3.0-它不支持AuthorizationFilterContext,当身份验证失败时,我需要将用户重定向到错误页面

AuthHandlerCode:-

public class CheckADGroupHandler : AuthorizationHandler<CheckADGroupRequirement>
{
   private readonly IHttpContextAccessor _httpContextAccessor;

   public CheckADGroupHandler(IHttpContextAccessor httpContextAccessor)
   {
      _httpContextAccessor = httpContextAccessor ?? throw new 
      ArgumentNullException(nameof(httpContextAccessor));
   }

   protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,CheckADGroupRequirement requirement)
   { 

    if (wi.IsAuthenticated)
    {
        context.Succeed(requirement);
    }
    else
    {
        var endPoint = (Endpoint)context.Resource;
        var attributes = endPoint.Metadata.GetOrderedMetadata<Attribute>();
        var action = endPoint.Metadata.GetMetadata<ControllerActionDescriptor>();

        //Redirect user to Error page here.....<<<<

        //below Code doesn't work in .NET Core 3.0
        //var mvcContext = context.Resource as AuthorizationFilterContext;
        //mvcContext.Result = new RedirectResult("/Shared/Error");
        //context.Succeed(requirement);

    }
    return Task.CompletedTask;
}
公共类CheckADGroupHandler:AuthorizationHandler
{
专用只读IHttpContextAccessor\u httpContextAccessor;
公共CheckADGroupHandler(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor=httpContextAccessor??抛出新
ArgumentNullException(nameof(httpContextAccessor));
}
受保护的覆盖任务HandleRequirementAsync(授权HandlerContext上下文,CheckADGroupRequirement)
{ 
如果(wi.未验证)
{
成功(要求);
}
其他的
{
var endPoint=(endPoint)context.Resource;
var attributes=endPoint.Metadata.GetOrderedMetadata,但两者都没有显示如何在.NET Core 3.0中返回重定向结果


欢迎使用任何指针……

如果您希望用户重定向到某个页面,如登录页面,如果用户没有访问权限,您可以按照以下步骤进行修复:

  • 进入
    HandleRequirementAsync
    方法

        if (Condition())
        {
            context.Succeed(requirement);
        }
        else {
            context.Fail();
        } 
    
  • 如果用户有访问权限,则执行
    context.success(要求);
    如果用户没有访问权限,则执行
    context.Fail();

  • 进入
    startup.cs
    =>
    ConfigureServices
    方法

    services.ConfigureApplicationCookie(options =>
    {
        options.Cookie.HttpOnly = true;
        options.ExpireTimeSpan = TimeSpan.FromHours(12);
        options.LoginPath = "/Account/Login";
        options.AccessDeniedPath = "/Account/AccessDenied";
        options.SlidingExpiration = true;
    });
    
  • 在我们写的那行

     options.LoginPath = "/Account/Login";
    
    在检查访问的
    HandleRequirementAsync
    方法失败、被重定向到控制器“主页”控制器和“登录”激活后,我们将预约用户


    我希望我的回答有用。

    这在
    ASP.NET Core 3.0
    中是不可能的。作为一个演练,我建议您应该使用
    ResourceFilter
    ,在其中可以调用
    AuthorizationService
    ,然后可以设置
    上下文。Result=new RedirectResult(…)
    @itminus找不到如何执行此操作的示例…例如:实现
    IAsyncResourceFilter::OnResourceExecutionAsync(ResourceExecutionContext,ResourceExecutionDelegate next)
    方法:
    var-HttpContext=context.HttpContext;var-authZ=HttpContext.RequestServices.GetRequiredService();var result=await authZ.AuthorizeAsync(HttpContext.User,您的资源,您的策略);if(!result.succeed){context.result=new RedirectToActionResult(…);}await next();}