2011-07-03 136 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