2011-07-03 132 views
22

如何在webClient类中设置标题? 我想:WebClient设置标题

client.Headers["Content-Type"] = "image/jpeg"; 

抛出一个WebException

我的代码:

WebClient client = new WebClient(); 
client.Headers.Set("Content-Type", "image/png"); 
client.Headers.Set("Content-Length", length); 
client.Headers.Add("Slug", name); 
NameValueCollection nvc = new NameValueCollection(); 
nvc.Add("file", FileContents); 

Byte[] data = client.UploadValues(url, nvc); 
string res = Encoding.ASCII.GetString(data); 
Response.Write(res); 

回答

29

如果头已经存在:

client.Headers.Set("Content-Type", "image/jpeg"); 

如果一个新的标题:

client.Headers.Add("Content-Type", "image/jpeg"); 

此外,还有一个机会,你得到,因为你试图设置标题错误太晚了。发布您的例外,以便我们可以让您知道。

更新

看起来像有在“内容类型”标头WebClient类一些奇怪的限制。看看使用client.Download方法(DownloadData,DownloadFile等)

看看在webclient上使用“UploadFile”方法是否工作,而不是手动执行。它返回休止体byte []。

如果您仍然遇到WebClient问题,请尝试使用普通的旧HttpRequest/HttpWebRequest。

+0

异常详细信息:System.Net.WebException:对于此请求,Content-Type标头不能从其默认值更改。 –

+0

回复更新... – jdc0589

+0

更新后... – jdc0589

0

您是否尝试过这样的语法:client.Headers.Add("Content-Type", "image/jpeg");

什么是你的堆栈跟踪?你在什么时候设置这个?你在哪个版本的IIS/OS下运行?

+0

不适合我。我正在使用IIS V5.1 –

+0

你的堆栈跟踪是什么?什么时候设置标题?可以发布一些更多的代码? – Mrchief

11

看来你不能使用WebClient.UploadValues方法设置Content-type。您可以设置内容类型与WebClient.UploadData方法

使用类似,

Client.Headers["Content-Type"] = "application/json"; 
Client.UploadData("http://www.imageshack.us/upload_api.php", "POST", Encoding.Default.GetBytes("{\"Data\": \"Test\"}")); 
0

如果使用UploadValues方法你不能改变的内容类型,它必须是应用程序/ x-WWW的形式-urlencoded,请参阅web客户端源代码 enter image description here