Question

For a POST request, I got back a response in text/html format and the response body was containing the below info:

oauth_token=XXXXXXXXXXXXXXXXXXXXXXXXX&oauth_token_secret=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&oauth_callback_confirmed=true

I made this request through System.Net.Http.HttpClient and I throught I could read the response with FormUrlEncodedMediaTypeFormatter as FormDataCollection but it turned out that FormUrlEncodedMediaTypeFormatter only supports application/x-www-form-urlencoded format by default. So, I worked around this with the following code:

using (OAuthHttpClient client = new OAuthHttpClient(creds)) {

    var response = await client.PostAsync(requestUri, new EmptyContent());
    var formatter = new FormUrlEncodedMediaTypeFormatter();
    formatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
    var result = await response.Content.ReadAsAsync<FormDataCollection>(new List<MediaTypeFormatter>() { formatter });

}

The question here is:

Is the response provider (in this case it is Twitter) doing it wrong by sending this response as text/html or should FormUrlEncodedMediaTypeFormatter support text/html type by default?

Was it helpful?

Solution

Your question is missing some key info i.e. what is the requestUri supposed to return by default, is it a Web API service or an external one etc. It seems it's not Web API because it's little odd that it returns "text/html".

But the fact that FormUrlEncodedMediaTypeFormatter doesn't support formatting back from text/html is absolutely fine. Because why would it? "application/x-www-form-urlencoded" is effectively a key-value dictionary and text/html is a rich media type.

In Web API, with the way content negotiation works, it looks at

  1. Mediatype mappings (I assume not in place in your case)
  2. Accept headers - looking at your request you don't set them
  3. Request content type - again, looking at your request you don't set it so it's empty
  4. Can the formatter serialize a given type

So if you make the request as you showed to any Web API action, it would return text/xml (if you didn't tweak conneg manually).

OTHER TIPS

I agree with Filip that this is a fine work around to an incorrect content type header.

Henrik

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top