我有一个带有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/

10-11 20:30