2016-06-23 33 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")); 
相關問題