2017-10-13 21 views
2

XML 요청을 받아 XML을 구문 분석 한 다음 WorldPay XML API로 전송하는 미들웨어 API 서비스를 통합하려고합니다. 이 응용 프로그램은 .NET 핵심에서 개발되었습니다.DTD 구문 분석 오류가있는 .NET Core Web API XML

XML과 일치하는 클래스를 만들었고 클래스를 컨트롤러 끝점의 입력 매개 변수로 사용하고 있습니다.

WorldPay XML API docs에 기초하여, 유효한 요청 형식이다 WorldPay에서의 API의 엔드 포인트와 1 :

<?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이어야한다. 서비스는 가맹점 코드를 서비스가 사용하는 판매자 코드로 수정하고 민감한 데이터를 난독 화하고 로그/추적하며 WorldPay에 요청을 보내야합니다.

내가 겪고있는 문제는 요청 XML에! DOCTYPE이 포함되어 있으면 endpoint에서 매개 변수로 만든 클래스가 null이라는 것입니다. ! 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> 

답변

0

가능성은이 DTD에 대하여 그것의 유효하지 XML을 구문 분석하지 그것.

인터페이스를 마크 업하지 않아서 요소가 무엇이고 속성이 무엇인지 알려주지 않으므로 XML을 작성할 수 없습니다. 예를 들어 orderCode는 속성이 아닌 요소로 렌더링됩니다. 내 생각

당신은 같은 것을보고 당신의 인터페이스를 필요로이

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

또는

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

당신이 당신의 XML이 유효한지 확인에서 다시 DTD를 넣어 전에 https://liquid-technologies.com/online-xml-validator

+0

를 보라 그건 XML 표현을 허풍 쟁이로 만들었지 만, 내 수업은 [XmlAttribute]/[XmlElement] –