【问题标题】:Remove XML Namespaces from action Result从操作结果中删除 XML 命名空间
【发布时间】:2016-11-26 16:29:31
【问题描述】:

使用 Web API 和 .NET Core,当我返回 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")));

【问题讨论】:

  • 你用 RTM 试过了吗?在 RTM 已经推出一段时间后仍然使用 RC1/RC2 听起来不是一个好计划。更好的迁移,可能在 RTM 中已经修复了
  • 我应该提到我正在使用 RTM。
  • 我的错误。我将它与从 RTM 中删除的一些东西混淆了。您是否删除了以前的 OutputFormatters?即在添加之前调用.OutputFormatters.Clear()?我假设.AddXmlSerializerFormatters() 已经添加了格式化程序,所以您的选项可能没有生效
  • 至少AddXmlSerializerFormatters() 调用github.com/aspnet/Mvc/blob/1.0.0/src/… MvcXmlSerializerMvcOptionsSetup 添加github.com/aspnet/Mvc/blob/1.0.0/src/…
  • 另外值得尝试var outputFormatter = options.OutputFormatters.OfType&lt;XmlSerializerOutputFormatter&gt;().Single() 获取XmlSerializerOutputFormatter 类型的第一项,然后设置它的属性outputFormatter.WriterSettings.OmitXmlDeclaration = true

标签: asp.net-web-api asp.net-core .net-core


【解决方案1】:

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

如果您想支持 XmlSerializer,则只注册该格式化程序,如果您出于某种原因想要同时支持这两者,请确保更改他们寻找的内容类型。示例:application/xml-dcs、text/xml-dcs、application/xml-xmlser、text/xml-ser

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 2020-04-06
    相关资源
    最近更新 更多