Имам проблем с HttpClient.PostAsJsonAsync()
В допълнение към "application/json" в заглавката "Content-Type" методът също добавя "charset=utf-8"
така че заглавката изглежда така:
Тип съдържание: приложение/json; charset=utf-8
Въпреки че ASP.NET WebAPI няма проблем с тази заглавка, открих, че други WebAPI, срещу които работя като клиент, не приемат заявка с тази заглавка, освен ако не е само приложение/json.
Има ли все пак да премахнете "charset=utf-8" от Content-Type, когато използвате PostAsJsonAsync(), или трябва да използвам друг метод?
РЕШЕНИЕ: Кредити за Yishai!
using System.Net.Http.Headers;
public class NoCharSetJsonMediaTypeFormatter : JsonMediaTypeFormatter
{
public override void SetDefaultContentHeaders(Type type, HttpContentHeaders headers, MediaTypeHeaderValue mediaType)
{
base.SetDefaultContentHeaders(type, headers, mediaType);
headers.ContentType.CharSet = "";
}
}
public static class HttpClientExtensions
{
public static async Task<HttpResponseMessage> PostAsJsonWithNoCharSetAsync<T>(this HttpClient client, string requestUri, T value, CancellationToken cancellationToken)
{
return await client.PostAsync(requestUri, value, new NoCharSetJsonMediaTypeFormatter(), cancellationToken);
}
public static async Task<HttpResponseMessage> PostAsJsonWithNoCharSetAsync<T>(this HttpClient client, string requestUri, T value)
{
return await client.PostAsync(requestUri, value, new NoCharSetJsonMediaTypeFormatter());
}
}