При использовании HttpClient
я прочитал примеры (например, этот пример ), в которых DefaultRequestHeaders
используется для установки типа содержимого (например, "application / json") запроса Post.
Я пытался сделать что-то подобное, но это не удалось.API
Я отправляю запросы с жалобой на то, что ему был отправлен «неподдерживаемый тип» (который он говорит, когда тип контента не установлен на json
).
После этого я добавил одну строку и решилпроблема (вы можете увидеть строку в коде ниже с комментариями).
Мой вопрос: зачем нужна эта строка?И если я включу эту строку (которая задает тип контента для content ), это не делает ненужной настройку «заголовка запроса по умолчанию».Что делает этот «заголовок запроса по умолчанию», если что-нибудь?
(Я на самом деле пробовал и комментировал строки, связанные с DefaultRequestHeaders
, и он работал без проблем. Так, для чего DefaultRequestHeaders
хорош?)
Мой код:
// Get the bytes for the request, should be pre-escaped
byte[] bytes = Encoding.UTF8.GetBytes(jsonEmployeeData);
client.BaseAddress = new Uri("the address here");
// client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Add("customHeader", "blahblahblah");
ByteArrayContent byteContent = new ByteArrayContent(bytes); //Make a new instance of HttpContent (an abstract class that can't be instantiated)
//THIS is the solution
//byteContent.Headers.ContentType = new MediaTypeWithQualityHeaderValue("application/json"); //If I UNCOMMENT THIS, IT WORKS!!
try
{
HttpResponseMessage response = await client.PostAsync("staff", byteContent);
Console.WriteLine(response.ToString());
}
catch (Exception ex)
{
Console.WriteLine("Something happened, oopps!" + ex.Message);
}
Console.WriteLine("Press any key");
Console.ReadLine();
client
это, кстати, HttpClient
.