Asp.net web api 设置默认WebAPI格式化程序

Asp.net web api 设置默认WebAPI格式化程序,asp.net-web-api,Asp.net Web Api,我们使用WebAPI来模拟遗留系统的处理。因此,我们希望默认响应格式化程序是XmlFormatter,而不是JsonFormatter。原因是对服务的一些现有调用不提供Accept:HTTP头字段 我可以通过从Formatters集合中删除JsonFormatter,然后重新添加它,强制它位于链的末尾来实现这一点 然后使用XmlFormatter生成默认格式响应。虽然它可以工作,但感觉不正确,尽管我将Json移到集合的后面,但不能保证XmlFormatter位于集合的前面 想法/想法?只需按正确

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

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

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


想法/想法?

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

//Web Api配置中的某个地方
config.Formatters.Clear();
Add(新的XmlMediaTypeFormatter());
Add(新的JsonMediaTypeFormatter());
因此,默认设置为XML,第一个格式化程序,但如果请求需要,API仍然支持JSON(使用适当的HTTP头)

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

//Web Api配置中的某个地方
Replace(typeof(IContentNegotiator),新的myCustomContentCongregator();

有一个示例。

当内容类型为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;

谢谢,我使用了与您的第一个建议类似的内容。我没有清除()格式化程序,这可能是更好的方法。我只是删除了JsonFormatter并将其添加回XmlFormatter之后。但您的方法确保了XmlFormatter是第一位的,因此可能更适合我的要求。ThanksTip:add:使用System.Net.Http.Formatting;