I'm trying to post some JSON to an external API which keeps failing because my content is chunked. Please can someone tell me how to disable it?
I'm using ASP.NET 5 so think I'm using System.Net.Http, Version=4.0.1.0
Here is the code I've tried:
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);
}
But It still seems to have the Transfer-Encoding set to "chunked" when I check Fiddler.
Can anyone help with this?
It looks like you need to set the Content-Length
header too, if you don't it seems to use the MaxRequestContentBufferSize
on HttpClientHandler
to chunk the data when sending it.
Try using a StringContent
, ByteArrayContent
or StreamContent
(If the steam is seekable) as these will be able to calculate the length for you.
var content = new StringContent(json);
HttpResponseMessage response = await client.PostAsync(content);
The PostAsJsonAsync
extension methods create ObjectContent
under the hood which doesn't calculate the Content-Length
and return false:
public class ObjectContent : HttpContent
{
/* snip */
protected override bool TryComputeLength(out long length)
{
length = -1L;
return false;
}
}
Thus will always fall back to chunking to the buffer size.