You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 3.0:授权处理器重定向与RouteEndpoint返回RedirectToActionResult方法

解决方案:.NET Core 3.0 路由端点重定向与授权失败重定向问题

问题1:RouteEndpoint 如何返回 RedirectToActionResult?

在 .NET Core 3.0 中,RouteEndpoint 属于底层路由系统组件,本身并不直接返回 ActionResult 类型(比如 RedirectToActionResult)。如果需要重定向到指定控制器的 action,你可以按以下方式实现:

  • 首先确保能访问到 HttpContext:可以通过依赖注入 IHttpContextAccessor,或者在中间件/授权处理器中直接获取。
  • 使用 IUrlHelper 生成目标 action 的完整 URL,避免硬编码路径:
    var urlHelperFactory = _serviceProvider.GetRequiredService<IUrlHelperFactory>();
    var actionContext = new ActionContext(
        _httpContextAccessor.HttpContext,
        _httpContextAccessor.HttpContext.GetRouteData(),
        new ControllerActionDescriptor()
    );
    var urlHelper = urlHelperFactory.GetUrlHelper(actionContext);
    var targetUrl = urlHelper.Action("Error", "Shared");
    
  • 最后通过 HttpContext.Response 执行重定向:
    _httpContextAccessor.HttpContext.Response.Redirect(targetUrl);
    

如果是在控制器内部处理相关逻辑,直接返回 RedirectToActionResult 即可,和传统 MVC 用法一致:

return RedirectToAction("Error", "Shared");

问题2:授权处理器中认证失败重定向至错误页面

.NET Core 3.0+ 中,AuthorizationHandlerContext.Resource 的类型从 AuthorizationFilterContext 改为了 Endpoint,导致你原来的代码失效。这里利用你已注入的 IHttpContextAccessor 就能解决问题,修改后的代码如下:

protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, CheckADGroupRequirement requirement)
{
    // 替换为你的实际用户认证判断逻辑
    if (wi.IsAuthenticated)
    {
        context.Succeed(requirement);
    }
    else
    {
        var httpContext = _httpContextAccessor.HttpContext;
        if (httpContext != null)
        {
            // 重定向到错误页面
            httpContext.Response.Redirect("/Shared/Error");
            // 标记授权失败,阻止后续管道执行
            context.Fail();
        }
    }
    return Task.CompletedTask;
}

需要注意这几点:

  • 调用 context.Fail() 明确标记授权失败,ASP.NET Core 会停止后续的授权检查和请求处理。
  • 确保 IHttpContextAccessor 已在 Startup.cs 中注册:
    services.AddHttpContextAccessor();
    
  • 如果错误页面基于 MVC 控制器,建议用 IUrlHelper 生成 URL,避免路由配置变化导致路径失效。

内容的提问来源于stack exchange,提问作者Ram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:40:52