don*_*y80 17 asp.net dotnet-httpclient .net-core asp.net-core
我正在尝试将一些JSON发布到外部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);
}
Run Code Online (Sandbox Code Playgroud)
但是当我检查Fiddler时,似乎仍然将Transfer-Encoding设置为"chunked".
有人能帮忙吗?
Kev*_*ith 11
看起来你也需要设置Content-Length标题,如果不这样做,它似乎在发送时使用MaxRequestContentBufferSizeon HttpClientHandler来分块数据.
尝试使用a StringContent,ByteArrayContent或StreamContent(如果蒸汽是可寻找的),因为这些将能够为您计算长度.
var content = new StringContent(json);
HttpResponseMessage response = await client.PostAsync(content);
Run Code Online (Sandbox Code Playgroud)
该PostAsJsonAsync扩展方法创建ObjectContent不计算在引擎盖下Content-Length,并返回false:
public class ObjectContent : HttpContent
{
/* snip */
protected override bool TryComputeLength(out long length)
{
length = -1L;
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
因此总是会回退到缓冲区大小的块.
| 归档时间: |
|
| 查看次数: |
6160 次 |
| 最近记录: |