从网络 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/"><Tournament><Match ID="SomeMatch" /></Tournament></string>
两个问题:
- 为什么我的 XML 没有它却被包裹在这个字符串元素中?
- 为什么<被转换成“<”和 > 到“>”
以及如何返回
<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
。
这里是新手,只要是 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/"><Tournament><Match ID="SomeMatch" /></Tournament></string>
两个问题:
- 为什么我的 XML 没有它却被包裹在这个字符串元素中?
- 为什么<被转换成“<”和 > 到“>”
以及如何返回
<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
。