WebClient设置头文件

44

我该如何在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);
4个回答

54

如果标题已经存在:

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

如果这是一个新的标题:

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

此外,你遇到错误的原因可能是你尝试过晚地设置了标头。请发布你的异常信息,以便我们可以帮助你。

更新

看起来WebClient类对“Content-Type”标头有一些奇怪的限制。尝试使用client.Download方法(DownloadData,DownloadFile等)

尝试使用WebClient上的“UploadFile”方法而不是手动执行操作,看看是否有效。它返回响应主体字节数组。

如果您继续遇到WebClient的问题,请考虑使用简单的HttpRequest/HttpWebRequest。


2
异常详细信息:System.Net.WebException:无法更改此请求的Content-Type标头的默认值。 - The Mask
1
客户端.Headers.Add是否也更新现有的标头? - beppe9000

17

看起来你不能使用WebClient.UploadValues方法设置Content-type。但你可以使用WebClient.UploadData方法设置Content-type。

可以尝试以下代码:

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

2

你尝试过这个语法吗:client.Headers.Add("Content-Type", "image/jpeg");

你的堆栈跟踪是什么?在什么时候设置它的?你正在运行什么版本的IIS/操作系统?


1
你的堆栈跟踪是什么?你在什么时候设置头文件?能否贴一些更多的代码? - Mrchief

2
如果你使用UploadValues方法,则无法更改Content-Type,它必须是application/x-www-form-urlencoded,请参考WebClient源代码。 enter image description here

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