如何设置WebClient的Content-Type标头?

29

我需要连接到第三方服务,需要进行Https Post操作,并发送自定义内容类型。

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

有没有一种方法可以在不重写CopyHeadersTo方法的情况下完成此操作?

编辑 CopyHeaderTo是我在使用.NET Reflector时看到的方法。它从私有属性中获取所有请求头,包括Content-Type,并从GetWebRequest调用。

4个回答

47

您可以尝试将内容添加到Headers集合中。

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

5
抛出一个WebException,表示当前请求的Content-Type无法更改。 - MaLKaV_eS
1
是谁抛出了这个异常?是你正在提交的服务器脚本吗?我已经测试了MSDN提供的示例,并成功地将Content-Type头设置为自定义值。 - Darin Dimitrov
2
我不得不这样做:_client.Headers ["Content-Type"] =“application/Json”。还没有完全正确,但至少它可以编译!在Silverlight 5中工作。 - RaoulRubin
1
只是想知道...在设置/添加Content-Type之前,您是否应该先调用myWebClient.Headers.Clear()来清除所有标头,或者更广泛地调用myWebClient.Headers.Remove("Content-Type")? - Dinesh Rajan

16
webclient.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";

4

我刚刚错过了Request.ContentType属性。如果重写了GetWebRequest方法,则将ContentType设置为所需的任何值即可。

但是,与第三方的连接仍然无法正常工作。真费解。


3
我也遇到了这个问题,并发现必须使用客户端HTTP,否则浏览器HTTP会因安全原因阻止Content-Type的更改。 这个MSDN链接解释了这个问题: (链接)
WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
WebRequest.RegisterPrefix("https://", WebRequestCreator.ClientHttp);
client.Headers["Content-Type"] = "application/json";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接