I have a Web API project that returns some product data. It negotiates the return type correctly depending on the Accept header (JSON/XML) of the request. The problem is, if no Accept header is specified it returns JSON, but I want it to return XML by default. How do I change the content negotiation defaults in Global.asax?
1 Answer
Found a solution via http://www.strathweb.com/2013/06/supporting-only-json-in-asp-net-web-api-the-right-way/
Added this in WebApiConfig.Register():
config.Formatters.Clear();
config.Formatters.Add(new XmlMediaTypeFormatter());
config.Formatters.Add(new JsonMediaTypeFormatter());
config.Formatters.Add(new FormUrlEncodedMediaTypeFormatter());
So default is XML, the first formatter, but the API still supports JSON if the request asks for it.
3 Comments
Kiran
Also add
FormUrlEncodedMediaTypeFormatter in your above code as by default Web API has that formatter too in the collectionSunny Sharma
what this FormUrlEncodedMediaTypeFormatter does?? I see that returns nothing!
Edgar
@Sunny it should return URL formatted values (msdn.microsoft.com/en-us/library/…) like
myVariable=1&myOtherVariable=test