The Mask
The Mask

Reputation: 17427

WebClient set headers

How I can set a header in the webClient class? I tried:

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

that throws a WebException

My code:

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);

Upvotes: 46

Views: 106980

Answers (4)

syb
syb

Reputation: 379

You cannot change the Content-Type if you use the UploadValues method, it must be application/x-www-form-urlencoded, see webclient source code enter image description here

Upvotes: 3

Mrchief
Mrchief

Reputation: 76198

Have you tried this syntax: client.Headers.Add("Content-Type", "image/jpeg");

What's your stack trace? At what point are you setting this? And what version of IIS/OS are you running under?

Upvotes: 2

SajithK
SajithK

Reputation: 1032

It seems you can not set Content-type with WebClient.UploadValues method. You could set Content-type with WebClient.UploadData method

Use something like,

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

Upvotes: 17

jdc0589
jdc0589

Reputation: 7018

If the header already exists:

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

if its a new header:

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

Also, there is a chance that you are getting an error because you are trying to set the headers too late. Post your exception so we can let you know.

Update

Looks like there are some weird restrictions on the "Content-Type" header with the WebClient class. Look in to using the client.Download methods (DownloadData, DownloadFile, etc...)

See if using the "UploadFile" method on webclient works rather than doing it manually. It returns the respose body byte[].

If you continue to have issues with the WebClient, try justing using a plain old HttpRequest/HttpWebRequest.

Upvotes: 57

Related Questions