Установка типа контента с заголовками запросов по умолчанию - PullRequest
0 голосов
/ 25 июня 2018

При использовании 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.

1 Ответ

0 голосов
/ 20 декабря 2018

Для API, который вы вызвали, требуется содержимое запроса в формате application / json , поэтому вы должны указать этот формат в своем контенте.Вот почему вам нужна эта строка кода:

byteContent.Headers.ContentType = new MediaTypeWithQualityHeaderValue("application/json");

О строке:

client.DefaultRequestHeaders.Accept.Add(
       new MediaTypeWithQualityHeaderValue("application/json"))

Это запрос Accept header, это означает, что содержимоетип ответа, который вы ожидаете от сервера.(Вы можете ожидать, что сервер вернет другой тип контента, такой как text / plain, ...).Надеюсь это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...