2016-06-23 4 views
0

Мне нужно установить заголовок Accept запроса GET на тип носителя, который имеет такой параметр, как application/json; model=v2. Попытки использовать MediaTypeWithQualityHeaderValue результат в FormatException с сообщениемУстановки a Принять тип, который имеет параметр

«Формат значения„приложения/JSON; модель = v3“является недействительным».

WebRequestHandler handler = new WebRequestHandler(); 
handler.ClientCertificates.Add(cert); 
HttpClient c = new HttpClient(handler); 
// throws below 
c.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json; model=v3")); 
string json = await c.GetStringAsync("https://localhost:44303/config.svc/clients/18.1.2.1"); 

Этот подход работает достаточно хорошо, при использовании HttpWebRequest где Accept заголовок является строкой. Возможно ли принудить HttpClient принять это значение как допустимый заголовок Accept.

Update

параметры не могут быть установлены с помощью конструктора, но вместо того, чтобы через Parameters собственность на сконструированной экземпляре.

var mediaType = new MediaTypeWithQualityHeaderValue("application/json"); 
mediaType.Parameters.Add(new NameValueHeaderValue("model","v3")); 
+0

сделал вы посмотрите на документацию MSDN по этому [MediaTypeWithQualityHeaderValue] (https://msdn.microsoft.com/en-us/library/system.net.http.headers.mediatypewithqualityheadervalue (v = vs.118) .aspx) 2 перегрузки 1 принимает строку, другая берет строку и double. Попробуйте просто с помощью '(" application/json ")' – MethodMan

+0

. Двойной - это определитель значения, чтобы помочь согласовать, какой тип использовать, если клиент и у сервера было более одного, которое они поддерживали. То есть yes xml будет работать, но json предпочтительнее. – Tedford

+1

@MethodMan Хороший вопрос о документации, хотя я пропустил [Параметры] (https://msdn.microsoft.com/en-us/library/system.net.http.headers.mediatypeheadervalue.parameters (v = vs.118) .aspx) на построенный экземпляр MediaTypeWithQualityHeaderValue – Tedford

ответ

0

Согласно @MethodMan suggesion некоторые продуманное использование документации идентифицировал Parameters собственности на построенном экземпляре. Очевидно, что ctor может обрабатывать только объявление типа/подтипа.

var mediaType = new MediaTypeWithQualityHeaderValue("application/json"); 
mediaType.Parameters.Add(new NameValueHeaderValue("model","v3")); 
Смежные вопросы