首页 > 解决方案 > 如何将 POST 请求正文中的有效 XML 提交到使用 XML 的 ASP.NET Core Web API?

问题描述

我已经安装Microsoft.AspNetCore.Mvc.Formatters.Xml并设置如下ConfigureServices()

services.AddMvc().AddXmlSerializerFormatters();

现在,我创建了一个简单的 Web API,如下所示:

[HttpPost]
[Consumes("application/json", new string[]{"application/xml"})]
public ActionResult<string> OnPost([FromBody] ZapScan scan)
{
    return scan.ToString();
}

接受ZapScan通过模型绑定:

public class ZapScan
{
    public string Url { get; set; }
    public bool Priority { get; set; }

    public override string ToString()
    {
        return $"url={Url}, priority={Priority}\n";
    }
}

但是,我从 Postman 发送的任何 XML 都会被拒绝,例如:

<?xml version="1.0" encoding="UTF-8"?>
<zapscan>
    <url>http://www.example.cm</url>
    <priority>false</priority>
</zapscan>

结果是:

{"type":"https://tools.ietf.org/html/rfc7231#section-6.5.1","title":"One or more validation errors occurred.","status":400,"traceId":"|f16a42f4-4c8f4678c6f84eb7.","errors":{"":["An error occurred while deserializing input data."]}}

如何将 POST 请求正文中的 XML 正确格式化为使用 XML 的 ASP.NET Web API?

标签: c#asp.net.net.net-core

解决方案


您的 XML 无效。您有两个开始<zapscan>标签,没有结束标签。

<?xml version="1.0" encoding="UTF-8"?>
<zapscan>
    <url>http://www.example.cm</url>
    <priority>false</priority>
<zapscan> <-- this needs to be a closing tag

此外,正如评论中已经介绍的那样,您的套管有问题。


推荐阅读