【问题标题】:Unwanted Prefix in SoapCore Response in .NET Core.NET Core 中 SoapCore 响应中不需要的前缀
【发布时间】:2021-04-01 13:29:19
【问题描述】:

我正在.NET Core 5.0 中编写SoapCore Web 服务,并且我已经成功地能够通过SOAPUI 执行请求并获得有效响应。我唯一不喜欢的是它在 repose 消息中添加了不需要的前缀。例如在这个回复中:

    <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <s:Body>
        <getMeterIntervalDataByTimeSliceResponse xmlns="http://tempuri.org/">
          <getMeterIntervalDataByTimeSliceResult xmlns:d4p1="http://schemas.datacontract.org/2004/07/MeterDataWebService.Models" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
            <d4p1:AccountId>1234567890</d4p1:AccountId>
            <d4p1:ID>0</d4p1:ID>
            <d4p1:IntervalEndTime>2020-12-22T15:30:57.3705724-05:00</d4p1:IntervalEndTime>
            <d4p1:IntervalLengthInSeconds>PT5M</d4p1:IntervalLengthInSeconds>
            <d4p1:Load>2345.8010350836185</d4p1:Load>
            <d4p1:MeterChannel>1</d4p1:MeterChannel>
            <d4p1:TimeZone>UT</d4p1:TimeZone>
            <d4p1:UnitOfMeasure>KM</d4p1:UnitOfMeasure>
            <d4p1:UtcOffset>0</d4p1:UtcOffset>
          </getMeterIntervalDataByTimeSliceResult>
        </getMeterIntervalDataByTimeSliceResponse>
      </s:Body>
    </s:Envelope>

如何去掉“d4p1”前缀?

【问题讨论】:

  • 您是否在服务中使用 xml 序列化。要删除前缀,您需要向 [XmlElement(ElementName = "AccountId", Namespace = "")] 添加一个带有空字符串的命名空间。
  • @jdweng 如果我必须更换 d4p1 吗?我需要将 xmlns:a 设置为我的响应结果,但我不明白该怎么做。我会避免实现消息格式类,因为如果我理解正确,这将是对已经完成的结果的额外解析工作。
  • @dpope :最好离开命名空间 d4p1。要解析所有你需要做的就是向定义命名空间的 c# 类添加一个属性。添加命名空间比修改xml更容易。
  • 你已经为解析做了哪些工作?

标签: c# .net xml api soap


【解决方案1】:

我想通了。它在我的 Startup.cs 类中。

app.UseSoapEndpoint("/Service.asmx", new BasicHttpBindingg(), SoapSerializer.XmlSerializer);

我忘了添加 SoapSerializer.XmlSerializer 部分

【讨论】:

    猜你喜欢
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 2014-12-29
    相关资源
    最近更新 更多