我有一个带有XmlDocument的.net核心Web应用程序,即使不进行任何修改也不会返回声明。
我有这个代码
[HttpPost]
[Consumes("application/xml")]
[Produces("application/xml")]
public ActionResult<XmlDocument> GW1()
{
XmlDocument xmlDocRec = new XmlDocument();
xmlDocRec.Load(Request.Body);
return Ok(xmlDocRec);
}
请求
<?xml version="1.0" encoding="utf-8"?>
<GR User="User1" PropertyCode="90001045">
<GW>1</GW>
</GR>
响应
<GR User="User1" PropertyCode="90001045">
<GW>1</GW>
</GR>
我在启动中有这个
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddXmlSerializerFormatters();
我需要响应
<?xml version="1.0" encoding="utf-8"?>
,但我不知道为什么它不返回。在xmlDocRec.InnerXml和xmlDocRec.OuterXml中存在。我既没有将类作为参数也没有响应,我无法将其用于需求,因为我使用Request.Body
显然,我使用xmlDocRec,添加和更新元素,但结果相同。当我使用xmlDocRec时,xmlDocRec.InnerXml和xmlDocRec.OuterXml包含
<?xml version="1.0" encoding="utf-8" standalone="no"?>
。稍后,我将需要删除standalone =“ no”,因为它不能作为响应。-编辑
我不知道这是否是严格的方法,但是现在我正在使用它
[HttpPost]
public ContentResult GW1()
{
XmlDocument xmlDocRec = new XmlDocument();
xmlDocRec.Load(Request.Body);
return new ContentResult
{
ContentType = "application/xml",
Content = xmlDocRec.OuterXml,
StatusCode = 200
};
}
这样,我就不需要在启动时使用Consumes,Produces和AddXmlSerializerFormatters了。
如果有人知道更好的方法,我愿意尝试。
最佳答案
您可能希望使用在XmlDeclaration
类上设置的显式属性值来制作响应。
我建议您看一下XmlDeclaration Class
[HttpPost]
[Consumes("application/xml")]
[Produces("application/xml")]
public ActionResult<XmlDocument> EchoXmlAndChangeEncoding()
{
string requestXML = Request.Body;
XmlDocument doc = new XmlDocument();
doc.Load(new StringReader(requestXML));
// Grab the XML declaration.
XmlDeclaration xmldecl = doc.ChildNodes.OfType<XmlDeclaration>().FirstOrDefault();
xmldecl.Encoding = "UTF-8";
xmldecl.Standalone = null; // <-- or do whatever you need
... // set other declarations here
// Output the modified XML document
return Ok(doc.OuterXml);
}
关于c# - .Net Core XmlDocument不返回声明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54115667/