如何从 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 中删除命名空间?的主要内容,如果未能解决你的问题,请参考以下文章