gpt4 book ai didi

asp.net - 如何使用 HttpClient 在 ASP.Net C# 中禁用分块传输编码

转载 作者:行者123 更新时间:2023-12-03 14:16:36 26 4
gpt4 key购买 nike

我正在尝试将一些 JSON 发布到外部 API,该 API 一直失败,因为我的内容被分块了。请问有人可以告诉我如何禁用它吗?

我正在使用 ASP.NET 5 所以我认为我在使用 System.Net.Http, Version=4.0.1.0

这是我试过的代码:

using (var client = new HttpClient())
{
// TODO - Send HTTP requests
client.BaseAddress = new Uri(apiBaseUrl);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("SAML", samlToken);
client.DefaultRequestHeaders.TransferEncodingChunked = false;

HttpResponseMessage response = await client.PostAsJsonAsync(path, jsonObject);
}

但是当我检查 Fiddler 时,它似乎仍然将 Transfer-Encoding 设置为“chunked”。

有人能帮忙吗?

最佳答案

看来您需要设置 Content-Length标题也是如此,如果您不这样做,它似乎使用 MaxRequestContentBufferSizeHttpClientHandler在发送数据时将数据分块。

尝试使用 StringContent , ByteArrayContentStreamContent (如果 Steam 是可搜索的)因为这些将能够为您计算长度。

var content = new StringContent(json);

HttpResponseMessage response = await client.PostAsync(content);
PostAsJsonAsync扩展方法创建 ObjectContent在不计算 Content-Length 的引擎盖下并返回假:
public class ObjectContent : HttpContent
{
/* snip */

protected override bool TryComputeLength(out long length)
{
length = -1L;
return false;
}
}

因此将始终回退到缓冲区大小的分块。

关于asp.net - 如何使用 HttpClient 在 ASP.Net C# 中禁用分块传输编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35464233/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com