我有一组托管在WCF Web Api的服务,我通过
javascript用
JSON与它们进行通信.在大多数情况下,我可以修改标头的接受位以要求JSON响应但是在某些情况下我无法做到这一点.这是由于我正在使用的javascript框架(Ext JS).对于某些事情,它只允许我指定一个URL而不是代理默认值,如标题.
但这不是Ext JS的问题. Web Api似乎默认返回XML,我想知道是否可以更改此默认值以便它可以返回JSON.提前致谢!
解决方法
一些实验似乎表明配置的格式化程序的顺序很重要(这非常直观).
默认情况下,当您创建HttpConfiguration的实例时,其Formatters集合包含以下格式化程序:
> XmlMediaTypeFormatter
> JsonValueMediaTypeFormatter
> JsonMediaTypeFormatter
> FormUrlEncodedMediaTypeFormatter
XML是默认格式的原因是因为它是第一个格式化程序.要使JSON成为默认值,您可以将集合重新排序为如下所示:
> JsonValueMediaTypeFormatter
> JsonMediaTypeFormatter
> XmlMediaTypeFormatter
> FormUrlEncodedMediaTypeFormatter
给定HttpConfiguration的实例配置,这是重新排序集合的一种方法:
var jsonIndex = Math.Max( config.Formatters.IndexOf(config.Formatters.JsonFormatter),config.Formatters.IndexOf(config.Formatters.JsonValueFormatter)); var xmlIndex = config.Formatters.IndexOf( config.Formatters.XmlFormatter); config.Formatters.Insert(jsonIndex + 1,config.Formatters.XmlFormatter); config.Formatters.RemoveAt(xmlIndex);
是否支持我不知道,但它似乎在WebApi 0.6.0上工作.