无法在 HttpFormUrlEncodedContent 上设置标头

本文关键字:设置 HttpFormUrlEncodedContent | 更新日期: 2023-09-27 18:30:17

我正在使用Windows.Web.Http.Http.HttpClient.SendRequestAsync,并使用一些自定义标头发布HttpFormUrlEncodedContent。

尝试时:

HttpClient httpClient = new HttpClient();
IList<KeyValuePair<string, string>> requestData = new List<KeyValuePair<string, string>>();
requestData.Add(new KeyValuePair<string, string>("form", "content"));
HttpFormUrlEncodedContent request = new HttpFormUrlEncodedContent(requestData);
request.Headers.TryAppendWithoutValidation("Custom", "Header");

我得到例外:

WinRT 信息:误用的标头名称。确保请求标头为 与 HttpRequestMessage 一起使用,响应标头使用 HttpResponseMessage 和带有 HttpContent 对象的内容标头。

如何使用 HttpFormUrlEncodedContent 添加每个请求的自定义标头?

请注意,虽然我知道 HttpClient.DefaultRequestHeaders,但它不是一个选择,因为我想重用 HttpClient 实例。

无法在 HttpFormUrlEncodedContent 上设置标头

因此,您实际上无法将标题设置为内容本身。事实证明,您需要将 HttpFormUrlEncodedContent 包装在 HttpRequestMessage 中,然后将标头设置为 HttpRequestMessage 对象,如下所示:

HttpFormUrlEncodedContent content = new HttpFormUrlEncodedContent(requestData);
HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Post, ServiceUri);
req.Content = content;
req.Headers.Add("Custom", "Header");