C# 在asp.net核心web api中发布DOCTYPE为的xml请求时出现验证错误

C# 在asp.net核心web api中发布DOCTYPE为的xml请求时出现验证错误,c#,.net,asp.net-web-api,asp.net-core-mvc,C#,.net,Asp.net Web Api,Asp.net Core Mvc,我用POST方法创建了一个简单的API端点。我以XML格式传递请求,当XML不包含DOCTYPE时,它可以正常工作 <?xml version="1.0" encoding="utf-8"?> <name x="5" y="5">M1P1</name> 我在Startup.cs中的服务配置为: services.AddMvc(options => {

我用POST方法创建了一个简单的API端点。我以XML格式传递请求,当XML不包含DOCTYPE时,它可以正常工作

<?xml version="1.0" encoding="utf-8"?>
<name x="5" y="5">M1P1</name>
我在Startup.cs中的服务配置为:

services.AddMvc(options =>
            {
                options.RespectBrowserAcceptHeader = true;
            }).AddXmlSerializerFormatters()
              .AddXmlDataContractSerializerFormatters();
模式和post方法如下所示:

[XmlRoot(ElementName = "name")]
    public class Name
    {
        [XmlAttribute(AttributeName = "x")]
        public string X { get; set; }
        [XmlAttribute(AttributeName = "y")]
        public string Y { get; set; }
        [XmlText]
        public string Text { get; set; }
    }

[HttpPost]
        public ActionResult<Name> Transform(Name name)
        {
            return name;
        }
[XmlRoot(ElementName=“name”)]
公共类名
{
[xmltattribute(AttributeName=“x”)]
公共字符串X{get;set;}
[xmltattribute(AttributeName=“y”)]
公共字符串Y{get;set;}
[XmlText]
公共字符串文本{get;set;}
}
[HttpPost]
公共操作结果转换(名称)
{
返回名称;
}
目标框架是.NETCore3.1


如有任何帮助/解释,将不胜感激。谢谢

合同使用XML序列化和XmlReader。必须将读取器设置为忽略DTD处理。这是否意味着我应该编写自定义序列化程序而不是使用标准序列化程序,或者有没有一种方法可以忽略DTD处理?我在谷歌上搜索了一下,但找不到任何解决方案。你能告诉我一些文件吗?谢谢,我还没有找到任何好的文档。您不需要自定义序列化,只需要自定义XmlSerializerInputFormatter。我只找到用于文本而不是xml的自定义Inputformatter。虽然两者应该相似。请参阅:如何发布Xml请求?你能分享相关代码来重现问题吗?此外,您可以考虑在发送XML请求之前检查XML文档内容,并检测它是否包含DOCTYPE,如果找到它,尝试删除它,然后发送XML请求。我使用Prtman,并使用请求正文中提到的XML。实际上,请求来自第三方,在收到请求之前,该方无权阻止DOCTYPE。
services.AddMvc(options =>
            {
                options.RespectBrowserAcceptHeader = true;
            }).AddXmlSerializerFormatters()
              .AddXmlDataContractSerializerFormatters();
[XmlRoot(ElementName = "name")]
    public class Name
    {
        [XmlAttribute(AttributeName = "x")]
        public string X { get; set; }
        [XmlAttribute(AttributeName = "y")]
        public string Y { get; set; }
        [XmlText]
        public string Text { get; set; }
    }

[HttpPost]
        public ActionResult<Name> Transform(Name name)
        {
            return name;
        }