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

调用Azure Function第二次出现401 Unauthorized错误的解决咨询

Azure Function 重复调用401问题修复

问题根源:你将x-functions-key添加到了HttpClient的默认请求头中,而HttpClientFactory生成的客户端实例是池化复用的,后续请求会重复添加该头部,导致请求头出现多个相同的密钥值,触发Azure Functions的认证校验失败,返回401。

修复步骤

  • 避免向HttpClient的默认请求头添加函数密钥,改为每次创建HttpRequestMessage时,单独给当前请求添加头部
  • 给请求内容设置正确的Content-Type为application/json,避免潜在的解析异常

修复后的调用代码

var endpoint = Environment.GetEnvironmentVariable("ExitUrl");
var request = new HttpRequestMessage(HttpMethod.Post, endpoint);
var content = JsonConvert.SerializeObject(requestDto);
// 用StringContent简化内容创建,同时指定编码和Content-Type
request.Content = new StringContent(content, Encoding.UTF8, "application/json");

var key = Environment.GetEnvironmentVariable("Exit-Key");
// 仅给当前请求添加认证密钥头部
request.Headers.Add("x-functions-key", key);

var httpClient = _httpClientFactory.CreateClient();
var response = await httpClient.SendAsync(request);

额外说明

  • HttpClientFactory的客户端实例会被池化复用,默认请求头会被保留在所有后续请求中,重复添加同一头部会生成多组键值对,不符合Azure认证的格式要求
  • 使用StringContent代替ByteArrayContent可以简化代码,同时自动处理内容编码和类型声明

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 04:04:56