设置具有参数的接受类型
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"));
我需要将 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"));