ОПУБЛИКОВАТЬ XML в .Net Core Web API

#c# #xml #.net-core #http-post #postman

#c# #xml #.net-ядро #http-post #почтальон

Вопрос:

У меня есть это действие на .Net Core Web API контроллере под названием HomeController :

 [HttpPost]
public IActionResult TestMethod([FromForm] DocumentDto xml) {
    int abc = 0;

    return Ok();
}
  

и модель DocumentDto :

 [XmlRoot(ElementName = "document", Namespace = "")]
public class DocumentDto
{
    [XmlElement(DataType = "string", ElementName = "id")]
    public string Id { get; set; }

    [XmlElement(DataType = "string", ElementName = "content")]
    public string Content { get; set; }

    [XmlElement(DataType = "string", ElementName = "author")]
    public string Author { get; set; }
}
  

Я также добавил точку останова в int abc = 0; и использую Postman для выполнения действия, как показано ниже

Заголовки запросов

Тело запроса

xml Для запроса используется следующее

 <document>
    <id>12345</id>
    <content>This is a Test</content>
    <author>vchan</author>
</document>
  

Однако во время отладки xml переменная имеет null свойства, как показано ниже

Отладка

Кроме того, в файл Startup.cs я включил AddXmlSerializerFormatters() , и он выглядит следующим образом:

 services
    .AddMvc()
    .AddXmlSerializerFormatters()
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
  

Почему xml не анализируется?

Комментарии:

1. Проверьте xmlbounty. Модели. DocumentDto, который является вашим вводом из метода тестирования, и посмотрите, вводите ли вы xml.

2. Я не понимаю, что вы имеете в виду, говоря «посмотреть, вводите ли вы xml»

3. Где вы читаете xml? Проблема не в синтаксическом анализе. Вы анализируете пустой XML-файл.

4. @jdweng Я не читаю это, поскольку отправляю не xml файл, а строку в теле запроса, которая должна быть расшифрована как xml .

Ответ №1:

На основе вашего запроса необработанный XML должен быть проанализирован, [FromBody] а не [FromForm] .

Комментарии:

1. Это сделало это. Теперь .net считывает и понимает исходное тело запроса. Спасибо!