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

.NET 6下HttpClientFactory重复返回前请求结果的问题求助

HttpClientFactory 请求重复返回相同结果的排查思路求助

我基于.NET 6构建了ASP.NET Core Web API服务,使用C#的HttpClientFactory向外部服务发起HTTP请求。目前遇到的问题是:传入不同参数的第二次请求会返回与前一次请求相同的结果。我尝试在每次请求开始时清除默认请求头,但没有效果。改用RestSharp或直接实例化new HttpClient()可以解决问题,但我希望使用官方推荐的HttpClientFactory,恳请各位提供排查思路。

相关代码如下:

// 每次请求的access token不同,但请求体相同
public async Task<MyResponse> GetXyz(object requestBody, string accessToken)
{
    var uri = "...";
    return await this.httpClientFactory.CreateClient("GetXyz").PostAsync<MyResponse>(uri, requestBody, GetHeaders(accessToken));
}

private static IList<(string, string)> GetHeaders(string accessToken)
{
    var headers = new List<(string, string)>
    {
        (HeaderNames.Accept, "application/json"), 
    };

    if (!string.IsNullOrWhiteSpace(accessToken))
    {
        headers.Add((HeaderNames.Authorization, "Bearer " + accessToken));
    }

    return headers;
}

public static async Task<T> PostAsync<T>(this HttpClient httpClient, string uri, object data, IList<(string, string)> headers = null)
    where T : class
{
    // httpClient.DefaultRequestHeaders.Clear();

    var body = data.Serialise(); // 转换为JSON字符串
    
    using (var request = new HttpRequestMessage(HttpMethod.Post, uri))
    {
        request.AddRequestHeaders(headers);
        request.Content = new StringContent(body, Encoding.UTF8, "application/json");

        using (var httpResponse = await httpClient.SendAsync(request))
        {
            var jsonResponse = await httpResponse.Content.ReadAsStringAsync();
            return JsonSerializer.Deserialize<T>(jsonResponse);
        }
    }
}

编辑2:网络流量差异
使用Fiddler Classic对httpclientfactory.CreateClient()发起的两次请求进行抓包,以下是请求头差异截图:
请求头差异截图1
请求头差异截图2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:15:35