【问题标题】:WebClient set headersWebClient 设置标头
【发布时间】:2024-01-17 13:10:01
【问题描述】:

如何在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);

【问题讨论】:

    标签: c# .net header webclient


    【解决方案1】:

    如果标头已经存在:

    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。

    【讨论】:

    • 异常详细信息:System.Net.WebException:无法更改 Content-Type 标头的默认值。
    • client.Headers.Add 是否也更新现有的标头?
    【解决方案2】:

    您似乎无法使用 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\"}"));
    

    【讨论】:

      【解决方案3】:

      如果使用 UploadValues 方法,则不能更改 Content-Type,它必须是 application/x-www-form-urlencoded,参见 webclient 源代码

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • 你的堆栈跟踪是什么?在什么时候设置标题?可以再贴一些代码吗?