我正在尝试将一些JSON发布到外部API,这会因为我的内容被分块而失败。有人可以告诉我如何禁用它吗?
我正在使用ASP.NET 5,所以我认为我正在使用System.Net.Http,版本= 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”。
任何人都可以帮忙吗?
答案 0 :(得分:8)
似乎您也需要设置Content-Length
标头,否则,似乎需要在MaxRequestContentBufferSize
上使用HttpClientHandler
对数据进行分块。
请尝试使用StringContent
,ByteArrayContent
或StreamContent
(如果可以找到蒸汽),因为它们将为您计算长度。
var content = new StringContent(json);
HttpResponseMessage response = await client.PostAsync(content);
PostAsJsonAsync
扩展方法在不计算ObjectContent
的情况下创建Content-Length
,并返回false:
public class ObjectContent : HttpContent
{
/* snip */
protected override bool TryComputeLength(out long length)
{
length = -1L;
return false;
}
}
因此,总会退回到缓冲区大小的分块。