How to return JSON from MVC WEB API Controller

asp.net-mvc, asp.net-mvc-4

Solution

Try like this:

public HttpResponseMessage Get()
{
    tokenResponse response = new tokenResponse();
    response.something = "gfhgfh";

    if(json)
    {
        return Request.CreateResponse(HttpStatusCode.OK, response, Configuration.Formatters.JsonFormatter);
    }
    else
    {
         return Request.CreateResponse(HttpStatusCode.OK, response, Configuration.Formatters.XmlFormatter);
    }    
}

or even better, to avoid cluttering your controller with such plumbing infrastructure code you could also write a custom media formatter and perform this test inside it.

Problem

I understand that WEB API uses content negotiation for Accept - Content-Type to return json or xml. This is not good enough and I need to be able pragmatically decide if I want to return json or xml. The internet is flooded with obsolete examples of using `HttpResponseMessage<T>`, which is no longer present in MVC 4. ``` tokenResponse response = new tokenResponse(); response.something = "gfhgfh"; if(json) { return Request.CreateResponse(HttpStatusCode.OK, response, "application/json"); } else { return Request.CreateResponse(HttpStatusCode.OK, response, "application/xml"); } ``` How do I change the above code so that it works?

Original source