从网络 API 返回 XML c#

Returning XML from web API c#

这里是新手,只要是 web API。

网络Api:

[HttpGet]
    public IHttpActionResult Test()
    {
        var doc = new XmlDocument();
        XmlElement tournament = (XmlElement)doc.AppendChild(doc.CreateElement("Tournament"));
        XmlElement match = (XmlElement)tournament.AppendChild(doc.CreateElement("Match"));
        match.SetAttribute("ID", "SomeMatch");

        return Ok(doc.InnerXml);
    }

结果:

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">&lt;Tournament&gt;&lt;Match ID="SomeMatch" /&gt;&lt;/Tournament&gt;</string>

两个问题:

  1. 为什么我的 XML 没有它却被包裹在这个字符串元素中?
  2. 为什么<被转换成“<”和 > 到“>”

以及如何返回

<Tournament>
<Match ID="SomeMatch" /></Tournament>

由于您从操作中返回一个字符串,ASP.Net Web API 正在创建等效的 XML 来表示一个字符串。

现在,如果您要确保 API 使用 XML 序列化,客户端可以将 accept header 添加到请求中。或者,您可以通过使用以下构造函数返回 Content 来指定格式化程序,或者在操作本身中指定格式化程序:

return Content (HttpStatusCodeHere, doc.DocumentElement, Configuration.Formatters.XmlFormatter)

请注意,我无法访问 Visual Studio,因此 class/property 名称可能不准确。

你必须 returns doc.DocumentElement 而不是 doc.InnerXml

因为 doc.InnerXml 以字符串格式为您提供 xml,这就是为什么您的 xml 以 <string> 格式显示的原因

[HttpGet]
        public IHttpActionResult Test()
        {
            var doc = new XmlDocument();
            XmlElement tournament = (XmlElement)doc.AppendChild(doc.CreateElement("Tournament"));
            XmlElement match = (XmlElement)tournament.AppendChild(doc.CreateElement("Match"));
            match.SetAttribute("ID", "SomeMatch");
            return Ok(doc.DocumentElement);                 
        }

你的所有 api(s) returns 输出都是 xml 格式,因为你的 HttpConfiguration 默认设置为 XmlFormatter