Web API return XML

本文关键字:XML return API Web | 更新日期: 2023-09-27 18:02:31

我试图将返回的数据显示为xml,但它以纯文本返回。我有这样的代码:

context.Response.AddHeader("Content-Type", "text/xml");
context.Response.Write("<pre>" + HttpUtility.HtmlEncode(writer) + "</pre>");

我正在使用这个:

using (XmlTextWriter writer = new XmlTextWriter(context.Response.OutputStream, System.Text.Encoding.UTF8))
                            {
... write the xml
}

…并创建XML

我是这样发送的:context.Response.Write("<pre>" + HttpUtility.HtmlEncode(writer) + "</pre>");

我怎么能返回XML与标签和所有的RAW ?

Web API return XML

老实说,Web API的正确答案是要么像@LB2建议的那样进行内容协商。

如果我们看看你做这件事的方式,有几件事是不正确的。

  1. 你试图使用HttpContext。当前直接写入输出,虽然这是有效的,但这不是一个推荐的做法,因为你几乎绕过了整个管道,并失去了Web API的许多潜在好处。
  2. 下一行:

context.Response.Write("<pre>" + HttpUtility.HtmlEncode(writer) + "</pre>");

不输出任何XML,基本上使XML无效。如果你删除它,事情似乎会开始工作。

  1. 真正的替代方案是遵循LB2的建议,尽管为一个操作抑制内容协商并不容易。另一种(官方推荐的)方法是:

    public HttpResponseMessage GetOrder()
    {
        // Sample object data
        Order order = new Order();
        order.Id = "A100";
        order.OrderedDate = DateTime.Now;
        order.OrderTotal = 150.00;
        // Explicitly override content negotiation and return XML
        return Request.CreateResponse<Order>(HttpStatusCode.OK, order, Configuration.Formatters.XmlFormatter);
    }
    

查看此链接获取更多信息:http://blogs.msdn.com/b/kiranchalla/archive/2012/02/25/content-negotiation-in-asp-net-mvc4-web-api-beta-part-1.aspx (注意:这是一篇旧的博客文章,需要更新到最新版本)

HttpConfiguration.Formatters包含各种格式化程序来序列化您的模型。而不是直接写入响应,考虑您的操作返回一个模型或XDocument,然后确保您在HttpConfiguration.Formatters中设置了XmlFormatter,以实际将其序列化为XML。