设置默认的WebAPI格式化程序

我们使用WebAPI模仿遗留系统的处理,因此我们希望将缺省响应格式化为XmlFormatter而不是JsonFormatter。 原因是对该服务的一些现有调用不提供Accept:HTTP标头字段。

我可以通过从Formatters集合中删除JsonFormatter然后重新添加它,迫使它位于链的末尾来实现此目的。

这会导致使用XmlFormatter的默认格式响应。 虽然它起作用,但它感觉不太正确,尽管我将Json移动到集合的后面,但不能保证XmlFormatter位于集合的前端。

创意/想法?

谢谢


只需按照正确的顺序添加格式化程序。 如果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());

这里有一个例子。


当内容类型为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;
链接地址: http://www.djcxy.com/p/3453.html

上一篇: Set the default WebAPI formatter

下一篇: How to add Web API to an existing ASP.NET MVC 4 Web Application project?