【问题标题】:Set default WebAPI formatter设置默认 WebAPI 格式化程序
【发布时间】:2014-07-07 00:17:38
【问题描述】:

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

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

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

想法/想法?

【问题讨论】:

    标签: asp.net-web-api


    【解决方案1】:

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

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

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

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

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

    一个例子是可用的here

    【讨论】:

    • 谢谢,我使用了与您的第一个建议类似的东西。我没有 Clear() 格式化程序,这可能是更好的方法。我只是删除了 JsonFormatter 并将其添加回来,强制它位于 XmlFormatter 之后。但是您的方法确保 XmlFormatter 是第一位的,因此可能更适合我的要求。谢谢
    • 提示:添加:使用 System.Net.Http.Formatting;
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-11-10
      • 2017-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-22
      • 2019-08-15
      • 2014-02-15
      相关资源
      最近更新 更多