Как отключить кодировку с передачей пакетов в ASP.Net С# с использованием HttpClient
Я пытаюсь опубликовать некоторый 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);
}
Но по-прежнему кажется, что Transfer-Encoding установлен на "chunked", когда я проверяю Fiddler.
Может кто-нибудь помочь с этим?
Ответы
Ответ 1
Похоже, вам тоже нужно установить заголовок Content-Length
, если вы не используете MaxRequestContentBufferSize
для HttpClientHandler
чтобы HttpClientHandler
данные при отправке.
Попробуйте использовать StringContent
, ByteArrayContent
или StreamContent
(если пар StreamContent
для поиска), поскольку они смогут рассчитать длину для вас.
var content = new StringContent(json);
HttpResponseMessage response = await client.PostAsync(content);
PostAsJsonAsync
расширения PostAsJsonAsync
создают PostAsJsonAsync
ObjectContent
под капотом, который не вычисляет Content-Length
и возвращает false:
public class ObjectContent : HttpContent
{
/* snip */
protected override bool TryComputeLength(out long length)
{
length = -1L;
return false;
}
}
Таким образом, всегда будет возвращаться к размеру буфера.