如何设置 WebClient Content-Type Header?

Posted

技术标签:

【中文标题】如何设置 WebClient Content-Type Header?【英文标题】:How to set WebClient Content-Type Header? 【发布时间】:2010-12-08 10:23:03 【问题描述】:

要连接到第三方服务,我需要创建一个 Https Post。必备条件之一是发送自定义内容类型。

我正在使用 WebClient,但我找不到如何设置它。我尝试创建一个新类并覆盖 CreateRequest 方法,但这会使请求崩溃。

有什么方法可以做到这一点而不必重写 CopyHeadersTo 方法?

EDIT CopyHeaderTo 是我见过的一种使用 .NET Reflector 的方法。它从 GetWebRequest 调用,并从私有属性设置所有请求标头,包括 Content-Type。

【问题讨论】:

【参考方案1】:
webclient.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";

【讨论】:

【参考方案2】:

好吧,我只是错过了Request.ContentType 属性。如果GetWebRequest 方法被覆盖,将ContentType 设置为所需的任何值。

仍然无法连接到第三方。去图吧。

【讨论】:

【参考方案3】:

我也遇到过。并且发现必须使用Client Http,否则Browser Http出于安全原因会阻塞Content-Type的改变。 This MSDN link 解释一下。

WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
WebRequest.RegisterPrefix("https://", WebRequestCreator.ClientHttp);
client.Headers["Content-Type"] = "application/json";

【讨论】:

【参考方案4】:

您可以尝试添加到Headers 集合。

myWebClient.Headers.Add("Content-Type","application/xxx");

【讨论】:

这会引发 WebException,表示当前请愿书的 Content-Type 无法更改。 谁抛出这个异常?它是您要发布到的服务器脚本吗?我已经测试了 MSDN 中提供的示例,它成功地将 Content-Type 标头设置为自定义值。 我必须这样做: _client.Headers["Content-Type"] = "application/Json" 仍然无法正常工作,但至少可以编译!在 Silverlight 5 中工作。 只是想知道.. 在设置/添加 Content-Type 之前,您应该先调用 myWebClient.Headers.Remove("Content-Type") 还是在更广泛的层面上调用 myWebClient.Headers.Clear() ?

以上是关于如何设置 WebClient Content-Type Header?的主要内容,如果未能解决你的问题,请参考以下文章

Spring WebFlux WebClient 构建器设置请求正文

如何在 Spring Webflux / WebClient 中设置事件循环池大小?

如何在 Spring 5 WebFlux WebClient 中设置超时

Spring Webflux Webclient |内容类型标题设置问题

如何使用 WebClient 使用 oauth2 安全的 REST API?

为WebClient请求设置User-Agent标头