У меня есть класс в переносимой библиотеке классов (ориентированный на .NET 4.5 и Windows Phone 8.1), который использует класс HttpClient (System.Net.Http.HttpClient) для отправки строки в веб-службу. Служба требует, чтобы я установил заголовок Accept в запросе, чтобы указать версию API следующим образом:
Accept: vnd.servicehost.v1+json
Я пробовал это в своем классе следующим образом:
_httpClient.DefaultRequestHeaders.Add("Accept", "vnd.servicehost.v1+json");
И он выдает исключение FormatException, указывающее, что мой заголовок Accept недействителен. Итак, я пытаюсь настроить его следующим образом:
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("vnd.servicehost.v1+json"));
И он по-прежнему выдает FormatException. Я нашел этот ответ, который убедил меня попробовать использовать метод TryAddWithoutValidation()
следующим образом:
_httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Accept", "vnd.servicehost.v1+json");
Наконец, я не получаю FormatException! Мой метод post работает, когда я вызываю его из своего тестового проекта модуля/интеграции .NET 4.5. Я получаю 200 с данными, которые я ожидал. Однако, когда я вызываю тот же метод из своего Windows Phone 8.1 (или эмулятора), служба отвечает, сообщая мне, что версия, указанная в моем запросе, недействительна.
Я не могу понять, как заставить Fiddler показать мне трафик от моего эмулятора Windows Phone, чтобы увидеть, как выглядит фактический запрос. Я предполагаю, что заголовок Accept никогда не добавляется. Я надеюсь, что опытный разработчик Windows Phone сможет распознать какую-то очевидную ошибку, которую я совершаю...