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

C#中使用HttpClient调用API遭遇401未授权错误

解决ASP.NET Core调用养老金API返回401未授权的问题

你调用http://id-pension.pension.gov.iq/Gatway/PC_FetchIdentificationInfo/ API时一直返回401未授权,即便检查过authString也无法解决,可从以下几个关键点排查:

1. 确认原始用户名密码的拼写

你注释里的原始字符串是Idintitfcation_GatWay:_Z3ii2EJ,注意到Idintitfcation拼写疑似有误(正确单词应为Identification,多了一个t),这很可能是核心问题。建议先跟API提供方确认用户名密码完全正确,再重新生成Base64编码:

var rawAuth = "Idintitfcation_GatWay:_Z3ii2EJ"; // 先验证此字符串的正确性
var authString = Convert.ToBase64String(Encoding.UTF8.GetBytes(rawAuth));

避免直接使用硬编码的Base64字符串,动态生成能规避编码或字符集带来的隐藏问题。

2. 移除DefaultCredentials的冲突配置

你设置了handler.UseDefaultCredentials = true;,这会让HttpClient自动附加当前系统用户的凭据,和手动添加的Basic Auth头产生冲突。直接注释掉这行:

// handler.UseDefaultCredentials = true;

Basic Auth是显式传递Authorization头,不需要自动附加默认凭据。

3. 验证请求头是否正确发送

调试时打印所有请求头,确认Authorization头存在且格式正确(Basic后面必须跟一个空格):

// 调试输出请求头,确认Authorization字段是否正确
foreach (var header in client.DefaultRequestHeaders)
{
    Console.WriteLine($"{header.Key}: {string.Join(", ", header.Value)}");
}

如果Authorization头丢失或格式错误,API会直接返回401。

4. 尝试更换编码方式生成Base64

部分旧API要求用ISO-8859-1而非UTF-8编码生成Basic Auth的Base64字符串,试试这个:

var authString = Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1").GetBytes(rawAuth));

5. 检查URL拼接的合法性

如果养老金编号包含特殊字符(比如空格、斜杠等),直接拼接会导致URL格式错误,API可能返回401而非404。对编号进行URL编码:

var encodedNumber = Uri.EscapeDataString(Pensioner_Number);
var requestUrl = $"http://id-pension.pension.gov.iq/Gatway/PC_FetchIdentificationInfo/{encodedNumber}";
var response = await client.GetAsync(requestUrl);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:00:03