.Net Core XmlDocument не возвращает объявление - PullRequest
0 голосов
/ 09 января 2019

У меня есть основное веб-приложение .net с XmlDocument, оно не возвращает декларации, даже без изменений.

У меня есть этот код

[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 при запуске.

Если кто-то знает лучший способ, я готов попробовать.

1 Ответ

0 голосов
/ 09 января 2019

Возможно, вы захотите составить свой ответ с явными значениями свойств, установленными в классе XmlDeclaration.

Я предлагаю вам взглянуть на Класс XmlDeclaration

[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);
}
...