Частичное значение параметра не передается с помощью HTTP Post

2

Я новичок в HTTP Post и сталкиваюсь с необычной проблемой. У меня есть объект запроса, указанный ниже:

[DataContract(Namespace = "http://Test.com/WCF")]
    public class Request
    {
        [DataMember]
        public string CardNumber { get; set; }
        [DataMember]
        public string CardExpDate { get; set; }
        [DataMember]
        public string AccountNumber { get; set; }
        [DataMember]
        public string NameOnCard { get; set; }
        [DataMember]
        public string CardVV2 { get; set; }
        [DataMember]
        public decimal PaidAmount { get; set; }
        [DataMember]
        public decimal ServiceFee { get; set; }
    }

Когда я делаю действие Http Post, только части параметров, переданные службе.

Мой заголовок и тело запроса выглядят следующим образом:

User-Agent: Fiddler
Host: localhost:8832
Content-Length: 303
Content-Type: application/xml;charset=utf-8

<Request xmlns="http://Test.com/WCF">
<AccountNumber>6136307626</AccountNumber>
<NameOnCard>Test test</NameOnCard>
<CardNumber>4000202020202020</CardNumber>
<CardExpDate>11/11</CardExpDate>
<CardVV2>123</CardVV2>
<PaidAmount>30</PaidAmount>
<ServiceFee>1</ServiceFee>
</Request>

Значения CardNumber, CardExpDate и CardVV2 всегда не привязаны к сервису. Другие поля хороши.

Любая помощь очень ценится. Спасибо!

Теги:
post
web-services
http
wcf

1 ответ

4
Лучший ответ

По умолчанию для DataContract сериализации предполагается, что члены сериализуются в алфавитном порядке, а не в порядке объявления, если вы не указали значения для свойства Order атрибута [DataMember] для управления порядком явно.

Похоже, что отправляемое сообщение не соответствует ни одному из этих форматов, поэтому вероятность того, что сериализатор предполагает, что некоторые элементы отсутствуют, и что вне порядка - это дополнительные элементы, он не знает, где помещается в класс CLR.

Итак, либо исправьте свой запрос, чтобы элементы были в алфавитном порядке, либо изменили порядок в datacontract в соответствии с вашим входным сообщением.

  • 1
    +1 точно - Чжао: вы должны определить четкий порядок в DataMembers, добавив [DataMember (Order = 1)] и так далее в свои данные.
  • 0
    Это быстро решило мою проблему. Спасибо, Томаср! :)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню