设置具有参数的Accept Type

时间:2016-06-23 20:15:54

标签: c# dotnet-httpclient

我需要将GET请求的Accept标头设置为具有application/json; model=v2等参数的媒体类型。尝试使用MediaTypeWithQualityHeaderValue会导致带有消息的FormatException

  

“值'application / json; model = 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标头。

更新

参数不能通过构造函数设置,而是通过构造实例上的Parameters属性设置。

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

1 个答案:

答案 0 :(得分:0)

根据@MethodMan建议,一些明智地使用文档确定了构造实例上的Parameters属性。 ctor显然只能处理类型/子类型的声明。

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