25

I can set Request.Content-Type = ... , Request.Content-Length = ...

How to set Accept and Accept-Language?

I want to upload a file (RFC 1867) and need to create a request like this:

POST /test-upload.php.xml HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 5.2; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: tr-tr,tr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-9,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Content-Type: multipart/form-data; boundary=---------------------------21724139663430
Content-Length: 56048

6 Answers 6

44

Take a look at Accept property:

HttpWebRequest myHttpWebRequest=(HttpWebRequest)WebRequest.Create(myUri);
myHttpWebRequest.Accept="image/*";    
HttpWebResponse myHttpWebResponse=
         (HttpWebResponse)myHttpWebRequest.GetResponse();

This MSDN article shows how to add custom headers to your request:

//Get the headers associated with the request.
WebHeaderCollection myWebHeaderCollection = myHttpWebRequest.Headers;    

//Add the Accept-Language header (for Danish) in the request.
myWebHeaderCollection.Add("Accept-Language:da");

//Include English in the Accept-Langauge header. 
myWebHeaderCollection.Add("Accept-Language","en;q=0.8");
Sign up to request clarification or add additional context in comments.

4 Comments

But now i have a problem...I send image and audio files but only image files was send.No audio file.can it be about my headers or attirubutes ?
@Mennan: what kind of problem?
@Mennan: you'll probably have to ask another question with appropriate amount of information, it's hard to say something without proper code sample and result description
hmm ok understand i will do it in 10 min.Thx for your help
3

When you want to set the Accept type and content type, just cast the webrequest to HttpwebRequest

var webreq= (HttpWebRequest)WebRequest.Create(requestUri);
webreq.Method = "POST";
webreq.Accept = "application/json";
webreq.ContentType = "application/json";

Comments

2

You need to be sure that you type cast the request to (HttpWebRequest), where the accept header property is available.

In the old WebRequest class, the Accept header is not accessible.

Comments

1

I have to confirm after several annoying attempts to use the headers that the

myWebHeaderCollection.Add("foo","bar"); solution works perfectly.

if you want to set the Language.

myWebHeaderCollection.Add("AcceptCharset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
myWebHeaderCollection.Add("TransferEncoding", "gzip,deflate");

Does not set the values however. Which may seem like a logical conclusion given the first one works.

1 Comment

Infuriatingly (because it is incomprehensible) however, Microsoft chose not only to ignore the HTTP model and invent their own "convenient" model instead (e.g. by having an Accept property on an object representing a request, when this is just an HTTP header), but to add insult to injury by not even making sure the generic methods work! Try to set "Accept" with this, and you get ArgumentException saying you can't set "restricted headers" (an artifact of their model, nothing to do with HTTP).
1

If you are using HttpRequestMessage, set the header using Headers.Add method. In your case :

request.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");

Comments

0

In a case where I have the pleasure of maintaining 15 year old vb.NET 3.5 code, this workaround was successful for me:

webReq = WebRequest.Create(apiHost)
CType(webReq, HttpWebRequest).Accept = "application/json"

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.