WebClient set headers

The Mask picture The Mask · Jul 3, 2011 · Viewed 79k times · Source

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

Answer

jdc0589 picture jdc0589 · Jul 3, 2011

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.