MVC 4 Web API 输出Json 和xml的问题

< ![CDATA[

2012/08/18内容

 

今天 在 玩 Web API 问题的时候,发现 输出 Json的变成Xml了。

 

问题如下:                                                                                                       

当用Ie的时候,返回的是Json

image

可以看到

第一次是xml ,第二次是json

后来发现了一下规律:

由于浏览器请求不同。

Ie 是json

firefox是xml

 

然后进一步测试在fiddle里面                                                                             

 

image

 

结果如下:

如果加上 accept: application/xml  则返回xml格式数据。

如果不加或者改成accept: application/json  则返回json数据

 

代码大致如下

 

  public class ImageWordApiController : ApiController
    {
       public MiNiWordImagesJson GetImages(string id)
     {
     ..................
           return  new MiNiWordImagesJson {id=1};
       }
}

 

后来翻阅 http://stackoverflow.com/questions/9847564/how-do-i-get-mvc-4-webapi-to-return-json-instead-of-xml-using-chrome

顿然明白。

解决方法                                                                                                             

其实可以这样做:

1. 在配置文件里面

 

GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(new QueryStringMapping("json", "true", "application/json"));

 

 

http://111.com/a/1?json = true

  http://111.com/a/1?xml = true

 

来限制返回的状态

2.,在请求的时候

加上accept: application/xml    来要求返回状态。 如上面的图

 

2013/6/3 新增内容

如果直接在服务器端强制输出json可以直接这样

GlobalConfiguration.Configuration.Formatters.Clear();
GlobalConfiguration.Configuration.Formatters.Add(new JsonMediaTypeFormatter());

先清空 在加入JsonMediaType

此方案 虽然清空了.在加入.会造成一些资源浪费

不如在源头控制,总是返回JsonMedia类型的

public class JsonContentNegotiator : IContentNegotiator
{
    public ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable>MediaTypeFormatter< formatters)
    {
        var result = new ContentNegotiationResult(new JsonMediaTypeFormatter(), new MediaTypeHeaderValue("application/json"));
        return result;
    }
}

然后注册下

config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator());

 

 

 

参考资料 :

 http://stackoverflow.com/questions/12629144/how-to-force-asp-net-web-api-to-always-return-json/12629311#12629311

 

 

 

 

 

 

 

 

 

 

]]>

你可能感兴趣的:(json)