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

C# HttpClient无法向ASP.NET Core Web API发送Authorization头

解决HttpClient无法传递Authorization头的问题

可能的原因及修复方案

1. 检查urlToSend路径格式

如果urlToSend是绝对URL,HttpClient会忽略已设置的BaseAddress,同时默认请求头(包括Authorization)不会被携带到请求中。

修复方式:
确保urlToSend使用相对路径。例如API完整地址为http://your-api-domain/changeuserpassword,则_url设为http://your-api-domain/,urlToSend设为"changeuserpassword"。

2. 直接在请求消息中添加Authorization头

避免依赖默认请求头,改为在具体请求消息中显式添加头,减少冲突概率:

httpClient.BaseAddress = new Uri(_url);
var serialized = new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json");
var requestMessage = new HttpRequestMessage(HttpMethod.Put, urlToSend)
{
    Content = serialized
};
requestMessage.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
var httpResponseMessage = await httpClient.SendAsync(requestMessage);

3. 处理HTTP重定向导致的头丢失

若API存在重定向(如路径跳转),HttpClient默认跟随重定向时不会携带Authorization头。

修复方式:
禁用自动重定向:

httpClient.AllowAutoRedirect = false;

或手动处理重定向逻辑,在重定向请求中重新添加Authorization头。

4. 排查API端中间件拦截

确认API项目中是否有自定义中间件、CORS策略或认证中间件修改/移除了Authorization头。可在API管道中添加调试代码,检查请求头到达控制器前的状态:

// 在Program.cs的中间件管道中添加
app.Use(async (context, next) =>
{
    if (context.Request.Path.ToString().Contains("changeuserpassword"))
    {
        var authHeader = context.Request.Headers[HeaderNames.Authorization];
        Console.WriteLine($"Authorization Header: {authHeader}");
    }
    await next();
});

5. 验证token值有效性

打印并确认token变量值是否正确,排除空值、格式错误(如多余空格、特殊字符)的情况。Postman可正常请求说明token本身有效,重点排查客户端代码中token的赋值逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:15:31