Мне нужно установить заголовок 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"));
сделал вы посмотрите на документацию MSDN по этому [MediaTypeWithQualityHeaderValue] (https://msdn.microsoft.com/en-us/library/system.net.http.headers.mediatypewithqualityheadervalue (v = vs.118) .aspx) 2 перегрузки 1 принимает строку, другая берет строку и double. Попробуйте просто с помощью '(" application/json ")' – MethodMan
. Двойной - это определитель значения, чтобы помочь согласовать, какой тип использовать, если клиент и у сервера было более одного, которое они поддерживали. То есть yes xml будет работать, но json предпочтительнее. – Tedford
@MethodMan Хороший вопрос о документации, хотя я пропустил [Параметры] (https://msdn.microsoft.com/en-us/library/system.net.http.headers.mediatypeheadervalue.parameters (v = vs.118) .aspx) на построенный экземпляр MediaTypeWithQualityHeaderValue – Tedford