【问题标题】:ASP.Net Web API. JSON and XML responses in one projectASP.Net Web API。一个项目中的 JSON 和 XML 响应
【发布时间】:2013-02-27 03:57:13
【问题描述】:

我有一个 ASP.Net Web API 项目,它已经包含控制器以 JSON 格式返回结果。现在我必须添加应该只接收和返回 XML 的新控制器。我知道我可以使用以下选项来推送控制器以返回 XML 序列化对象:

GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true

但是,如果我这样做,我希望旧控制器也会返回 XML 格式的数据,对吧?这不是我需要的。那么,我怎样才能实现我的目标并仅从某些控制器返回 XML 序列化对象?谢谢。

更新

我尝试了建议的方法,但它对我不起作用。我正在使用 Fiddler 进行测试。请注意结果仍然是JSON(最后一个截图)这是附加信息:

控制器:

请求类:

响应类:

Fiddler 中的请求:

Fiddler 中的响应:

【问题讨论】:

    标签: controller xml-serialization asp.net-web-api jsonserializer


    【解决方案1】:

    内容协商或序列化不是控制器应该关心的事情。

    开箱即用的 ASP.NET Web API 可以返回 XML 和 JSON 内容,客户端可以通过设置 Accept HTTP 标头来请求某种格式。

    设置为:

    Accept: application/json
    

    如果你想取回 JSON

    Accept: application/xml
    

    如果你想找回 XML

    编辑: 另请注意,Web API 默认使用 DataContractSerializer,在您的 cmets 中回答问题:

    [DataContract(Namespace = "schemas.datacontract.org/2004/07/Test.Models" )]
    public class TheThing
    {
        [DataMember]
        public string Name { get; set; }
        [DataMember(Name = "contentname")]
        public string ContentName { get; set; }
    }
    

    【讨论】:

    • 感谢您的回答。我删除了强制 XML 序列化的行(在原始问题中提到)。但是现在我看到 XML 序列化忽略了设置 XML 元素名称的属性: [XmlElement("contentname")] public string ContentName { get;放;我能以某种方式修复它吗?
    • 我还想在我的 XML 响应中避免以下属性:xmlns:i="w3.org/2001/XMLSchema-instance" 和 xmlns="schemas.datacontract.org/2004/07/Test.Models"
    • Piotr Walat,感谢您回答中的编辑部分。不幸的是,它不适合我。我不知道为什么。我用一些截图更新了我原来的问题。
    【解决方案2】:

    我遇到了一些接受不起作用的 API。如果我将“Content-Type”标头设置为

    ,如果 Accept 不起作用,我会在这些 API 上找到

    Content-Type: application/xml

    这将导致控制器以 XML 响应进行响应。

    在 Webapi2 中,Accept 标头现在确实会导致控制器返回预期的应用程序/xml 响应。这可能是早期版本的 WebAPI 的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-06
      • 1970-01-01
      • 2013-09-25
      • 2020-05-03
      • 2019-09-18
      • 1970-01-01
      • 2018-05-17
      • 1970-01-01
      相关资源
      最近更新 更多