繁体   English   中英

Web API返回XML

[英]Web API return XML

我正在尝试将返回的数据显示为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>");

如何在RAW中返回带有标签和所有标签的XML?

坦率地说,在Web API中正确的答案是按照@ LB2的建议进行内容协商。

如果我们看看您的操作方式,那么有些事情是不正确的。

  1. 您正在尝试使用HttpContext.Current直接写入输出,尽管这种方法行之有效,但不建议这样做,因为您几乎绕过了整个管道,并失去了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包含各种用于序列化模型的格式化程序。 不要直接写给Response,而应该考虑返回模型或XDocument ,然后确保在XmlFormatter设置了HttpConfiguration.Formatters以将其实际序列化为XML。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM