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

ASP.NET Core 6.0 Web API如何接收authorization请求头参数?

解决ASP.NET Core 6 Web API接收Authorization请求头的问题

问题原因

ASP.NET Core默认的认证中间件会自动处理Authorization请求头,处理完成后会将其从请求头集合中移除,导致控制器通过[FromHeader]无法获取到该字段。

解决方案

方法1:配置认证中间件保留Authorization头

在Program.cs中配置认证服务时,设置SkipAuthorizationHeaderHandling = true,让认证中间件不处理(不移除)Authorization头:

builder.Services.AddAuthentication("Bearer") // 替换为你的实际认证方案
    .AddJwtBearer(options =>
    {
        options.SkipAuthorizationHeaderHandling = true;
        // 保留原有的认证配置(如TokenValidationParameters等)
    });

设置完成后,Authorization头会保留在请求头集合中,控制器中的[FromHeader] string authorization就能正常接收参数。

方法2:通过HttpContext.Items传递Authorization头(适配自定义AuthenticationHandler场景)

如果使用自定义AuthenticationHandler,可以在认证逻辑中把Authorization头存入HttpContext.Items,再在控制器中读取:

  1. 修改自定义Handler:
protected override async Task<AuthenticateResult> HandleAuthenticateAsync()
{
    var authHeader = Request.Headers.Authorization.ToString();
    // 将头信息存入Items
    Context.Items["AuthHeader"] = authHeader;
    
    // 你的认证逻辑(验证令牌、生成ClaimsIdentity等)
    var claims = new List<Claim> { new Claim(ClaimTypes.Name, "test") };
    var identity = new ClaimsIdentity(claims, Scheme.Name);
    var ticket = new AuthenticationTicket(new ClaimsPrincipal(identity), Scheme.Name);
    
    return AuthenticateResult.Success(ticket);
}
  1. 在控制器中读取:
public virtual IActionResult GetStatus([FromRoute][Required] string requestId)
{
    if (HttpContext.Items.TryGetValue("AuthHeader", out var authObj) && authObj is string authorization)
    {
        // 使用authorization参数
    }
    else
    {
        return BadRequest("缺少Authorization请求头");
    }
    
    // 其他业务逻辑
    return Ok();
}

方法3:调整中间件顺序(查看原始请求头)

如果你的自定义中间件需要查看原始Authorization头,确保该中间件注册在认证中间件之前:

// 自定义中间件放在认证中间件之前
app.UseMiddleware<YourCustomMiddleware>();

app.UseAuthentication();
app.UseAuthorization();

这样自定义中间件就能在认证中间件处理前获取到Authorization头。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 20:01:02