通过断点 WebApiConfig.cs 配置发现,WebApi中有4个序列化器位于 config.Formatters 集合。
第一个就是 JsonMediaTypeFormatter ,紧跟着是 XmlMediaTypeFormatter 。
可是在我们使用浏览器直接访问Api时,返回的却是 Xml 。为什么呢?
继续跟踪发现,WebApi只在接收到 MediaType 为 ["application/json", "text/json"] 时才使用 JsonMediaTypeFormatter 序列化器。
那么问题解决了!
想要在浏览器访问时直接返回 Json 只需要 config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"))
var jsonFormatter = config.Formatters.JsonFormatter; jsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); // 对 JSON 数据使用混合大小写。驼峰式,但是是javascript 首字母小写形式. jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); // 解决json序列化时的循环引用问题 jsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;