4

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

GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true

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

更新

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

控制器:

控制器

请求类:

请求类

响应类:

响应类

Fiddler 中的请求:

Fiddler 中的请求

Fiddler 中的响应:

Fiddler 中的响应

4

2 回答 2

5

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

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

将其设置为:

Accept: application/json

如果你想取回 JSON

Accept: application/xml

如果你想取回 XML

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

[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; }
}
于 2013-03-11T20:33:40.360 回答
0

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

Content-Type: application/xml

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

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

于 2014-05-20T14:21:06.180 回答