如何从 WEB API 请求和响应 XML 中删除命名空间?

Posted

技术标签:

【中文标题】如何从 WEB API 请求和响应 XML 中删除命名空间?【英文标题】:How to remove namespace from WEB API request & response XML? 【发布时间】:2020-07-16 09:02:30 【问题描述】:

我想从 WEB API 请求和响应中删除突出显示的节点。 下面是 web api 中使用的类 Models

 [DataContract(Namespace = "")]
    public class ValidateRequest
    
        [DataMember]
        public string Client_Code  get; set; 
        [DataMember]
        public string ClientValidateNo  get; set; 
        [DataMember]
        public string UserID  get; set; 
        [DataMember]
        public string Password  get; set; 
    

[DataContract(Namespace = "")]
    public class ValidateResponse
    
    

【问题讨论】:

【参考方案1】:

我想从 WEB API 请求和响应中删除突出显示的节点。 下面是 web api 中使用的类 Models

要实现这个功能,首先需要创建一个继承自XmlSerializerOutputFormatter的类:

public class XmlSerializerOutputFormatterNamespace : XmlSerializerOutputFormatter
        
            protected override void Serialize(XmlSerializer xmlSerializer, XmlWriter xmlWriter, object value)
            
                //applying "empty" namespace will produce no namespaces
                var emptyNamespaces = new XmlSerializerNamespaces();
                emptyNamespaces.Add("", "any-non-empty-string");
                xmlSerializer.Serialize(xmlWriter, value, emptyNamespaces);
            
        

然后,在startup.cs的ConfigureServices中添加如下服务:

 services
    .AddMvc(options =>
    
        options.OutputFormatters.Add(new XmlSerializerOutputFormatterNamespace());
    ).AddXmlSerializerFormatters();

在api方法中:

   [Produces("application/xml")]
    public IActionResult GetXml(ValidateRequest request)
    
        ValidateResponse response = new ValidateResponse()
        
            Amount = 100,
            ClientValidateNo = request.ClientValidateNo,
            Client_Code = request.Client_Code,
            DepositorCity = "aaa",
            DepositorName = "das",
            DepositorState = "sadasd",
            Status = "fasfas"
        ;
        return Ok(response);
    

测试结果:

【讨论】:

以上是关于如何从 WEB API 请求和响应 XML 中删除命名空间?的主要内容,如果未能解决你的问题,请参考以下文章

如何与 Web XML/JSON API 交互?

如何从 Web Api 获取请求和响应并将其保存到数据库

如何在接收响应时通过 websocket 发送请求

WEB API

从 web api 响应中删除 $id

从 WSDL 生成请求/响应 XML