2016-06-23 34 views
0

我需要将GET请求的Accept头设置为具有诸如application/json; model=v2等参数的媒体类型。试图利用MediaTypeWithQualityHeaderValue结果在FormatException与Message设置一个接受类型,它有一个参数

“的值的格式‘应用/ 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时在接受头是一个字符串作品不够好。是否有可能强制HttpClient接受该值作为有效的Accept头。

更新

的参数无法通过构造而是通过在构建实例的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接受一个字符串,另一个接受一个字符串和一个双..只用'(“application/json”)试试' – MethodMan

+0

double是值限定符,用于协商如果客户端使用哪种类型和服务器有不止一个,他们都支持。即是的,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")); 
相关问题