.NET的核心Web API XML DTD与解析错误

问题描述 投票:2回答:1

我整合,是以XML请求,解析XML,然后将其发送到WorldPay的XML API中间件API服务。该应用程序在.NET开发的核心。

我已经作出的XML匹配类,现在用的是类作为控制器的终端输入参数。

基于WorldPay XML API docs,有效的要求是格式:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE paymentService PUBLIC "-//Worldpay//DTD Worldpay PaymentService v1//EN"
  "http://dtd.worldpay.com/paymentService_v1.dtd">
<paymentService version="1.4" merchantCode="YOUR_MERCHANT_CODE"> <!--Enter your own merchant code-->
  <submit>
    <order orderCode="YOUR_ORDER_CODE"> <!--Enter a unique order code each time-->
      <description>YOUR DESCRIPTION</description> <!--Enter a description useful to you-->
      <amount currencyCode="GBP" exponent="2" value="5000"/>
      <paymentDetails>
        <CARD-SSL>
          <cardNumber>4444333322221111</cardNumber>
          <expiryDate><date month="01" year="2020"/></expiryDate> 
          <cardHolderName>A Shopper</cardHolderName>
          <cardAddress>
            <address>
              <address1>47A</address1>
              <postalCode>CB94BQ</postalCode>
              <city>Cambridge</city>
              <countryCode>GB</countryCode>
            </address>
          </cardAddress>
        </CARD-SSL>
        <session shopperIPAddress="123.123.123.123" id="0215ui8ib1" /> 
      </paymentDetails>
      <shopper>
        <shopperEmailAddress>[email protected]</shopperEmailAddress>
      </shopper>
    </order>
  </submit>
</paymentService>

该API端点应为1:1与WorldPay的API端点。该服务应该修改商户代码是服务使用商户代码,混淆的敏感数据,日志/跟踪它,并发送一个请求WorldPay的。

我遇到的问题是,与I类制成的端点参数为空,如果请求XML包含在里面!DOCTYPE。如果我删除!DOCTYPE,和信息呢,XML解析以及和对象作为参数有效。

我在招摇端点看起来是这样的:

<?xml version="1.0"?>
<paymentService>
  <submit>
    <order>
      <description>string</description>
      <amount>
        <currencyCode>string</currencyCode>
        <exponent>string</exponent>
        <value>string</value>
      </amount>
      <paymentDetails>
        <cardssl>
          <cardNumber>string</cardNumber>
          <expiryDate>
            <date>
              <month>string</month>
              <year>string</year>
            </date>
          </expiryDate>
          <cardHolderName>string</cardHolderName>
          <cardAddress>
            <address>
              <address1>string</address1>
              <postalCode>string</postalCode>
              <city>string</city>
              <countryCode>string</countryCode>
            </address>
          </cardAddress>
        </cardssl>
        <session>
          <shopperIPAddress>string</shopperIPAddress>
          <id>string</id>
        </session>
      </paymentDetails>
      <shopper>
        <shopperEmailAddress>string</shopperEmailAddress>
      </shopper>
      <orderCode>string</orderCode>
    </order>
  </submit>
  <version>string</version>
  <merchantCode>string</merchantCode>
</paymentService>
c# xml dtd doctype asp.net-core-webapi
1个回答
0
投票

它可能它不是解析XML作为它不是针对DTD有效。

要创建的XML是无效的,你不标记了界面来告诉它什么元素,什么是例如orderCode属性被呈现为一个元素不是一个属性。

我猜你需要让你的界面看起来像这样

[XmlAttribute]
public string orderCode { get; set; }

要么

[XmlAttribute("orderCode")]
public string OrderCode { get; set; }

你把DTD之前,早在确保XML有效看看https://liquid-technologies.com/online-xml-validator

© www.soinside.com 2019 - 2024. All rights reserved.