从操作结果中删除 XML 个命名空间

Remove XML Namespaces from action Result

使用 Web API 和 .NET Core,当我 return 一个 XML 结果时,我得到以下结果:

    <Test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Response>
        <Status>0</Status>
    </Response>
</Test>

如何删除名称空间?

这是我的 startup.cs 文件的一部分

 services
            .AddMvc(config =>
            {
                // Add XML Content Negotiation
                config.RespectBrowserAcceptHeader = true;
                config.InputFormatters.Add(new XmlSerializerInputFormatter());
                config.OutputFormatters.Add(new XmlSerializerOutputFormatter(new XmlWriterSettings
                {
                    OmitXmlDeclaration = true,

                }));
            })
            .AddXmlDataContractSerializerFormatters()
            .AddXmlSerializerFormatters()
            .AddMvcOptions(opt => opt.FormatterMappings.SetMediaTypeMappingForFormat("xml", new MediaTypeHeaderValue("application/xml")));

XmlSerializerDataContractSerializer 格式化程序都为 application/xmltext/xml 查找 Content-TypeAccept header 值。因此,如果您注册了第一个格式化程序,则可能只有其中一个格式化程序会生效。

如果你想支持 XmlSerializer,那么只注册那个格式化程序,如果你出于某种原因想同时支持这两者,请确保更改他们寻找的 content-types。示例:application/xml-dcs、text/xml-dcs、application/xml-xmlser、text/xml-ser

如果出现上述问题,DataContractSerializerOutputFormatter 可能正在写出响应,因此您没有看到它生效。