我需要将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"));
答案 0 :(得分:0)
根据@MethodMan建议,一些明智地使用文档确定了构造实例上的Parameters属性。 ctor显然只能处理类型/子类型的声明。
var mediaType = new MediaTypeWithQualityHeaderValue("application/json");
mediaType.Parameters.Add(new NameValueHeaderValue("model","v3"));