调用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
相关产品推荐
相关产品推荐

