设置默认的WebAPI格式化程序

时间:2014-05-19 06:25:57

标签: asp.net-web-api

我们正在使用WebAPI来模仿遗留系统的处理,因此我们希望XmlFormatter的默认响应格式化程序而不是JsonFormatter。原因是某些现有的服务调用不提供Accept:HTTP头字段。

我可以通过从Formatters集合中删除JsonFormatter,然后重新添加它,强制它在链的末尾来实现这一点。

然后使用XmlFormatter生成默认格式响应。虽然它有效但它感觉不正确,虽然我将Json移动到集合的后面,但不能保证XmlFormatter位于集合的前面。

思想/想法?

由于

2 个答案:

答案 0 :(得分:10)

只需按正确的顺序添加格式化程序。如果ASP.NET Web API为相同的内容类型找到两个格式化程序,它将选择第一个格式化程序,因此以正确的顺序添加格式化程序非常重要。

//somewhere in Web Api config
config.Formatters.Clear();
config.Formatters.Add(new XmlMediaTypeFormatter());
config.Formatters.Add(new JsonMediaTypeFormatter());

因此默认将是XML,第一个格式化程序,但如果请求请求它(具有适当的HTTP标头),API仍然支持JSON。

最后,另一种不同的方法是使用自定义IContentNegociator。它允许您为给定的请求选择最合适的MediaTypeFormatter

//somewhere in Web Api config
config.Services.Replace(typeof(IContentNegotiator), new MyCustomContentNegotiator());

有一个例子here

答案 1 :(得分:0)

当内容类型为json

时,返回自动序列化并返回json
 var json = config.Formatters.JsonFormatter;
 json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
        config.Formatters.Remove(config.Formatters.XmlFormatter);
((DefaultContractResolver)config.Formatters.JsonFormatter.SerializerSettings.ContractResolver).IgnoreSerializableAttribute = true;