设置具有参数的接受类型

Settings an Accept Type which has a parameter

我需要将 GET 请求的接受 header 设置为具有 application/json; model=v2 等参数的媒体类型。尝试利用 MediaTypeWithQualityHeaderValue 导致 FormatException 和消息

"The format of value 'application/json; model=v3' is invalid".

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 header 是一个字符串。是否可以强制 HttpClient 接受此值作为有效的 Accept header.

更新

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

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

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

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