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

C#使用HttpClient调用Azure AAD保护API时遇401未授权错误

问题排查与解决

核心问题1:异步方法未等待导致令牌未正确设置

你的SetHeaders方法是async void,在CallTestAppAPIToGetDataAsync中直接调用时不会等待异步操作完成,这意味着发送请求时令牌可能还没获取到,或者Authorization头还未设置生效。虽然断点能看到令牌正确,但那是断点阻塞后的结果,实际运行时异步流程未同步执行。

修复方法:

  • 将SetHeaders改为async Task:
private async Task SetHeaders(HttpClient HttpClientObj)
{
    // 原有逻辑不变,仅修改方法签名
}
  • 在调用处添加await等待异步完成:
await SetHeaders(testHttpClientObj);

核心问题2:请求URI变量错误

CallTestAppAPIToGetDataAsync方法接收的参数是testAppUri,但调用GetAsync时用的是gridstateUri,这会导致请求的URI和你在Postman中测试的不一致,直接引发401(API无法识别错误的请求路径,或该路径无对应权限)。

修复方法:

response = await testHttpClientObj.GetAsync(requestUri: testAppUri);

辅助排查:修复日志输出问题

当前日志代码未正确传递异常对象,无法记录具体错误信息,不利于排查令牌获取过程中的潜在问题:

// 原错误写法
_logger.LogError("Exception Message: {ex}");
// 改为正确传递异常的写法
_logger.LogError(ex, "Failed to acquire access token");

额外优化:HttpClient复用

每次调用都新建HttpClient会导致不必要的资源消耗,建议复用单例或通过依赖注入管理HttpClient实例,避免Socket耗尽等问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 15:27:15