c# - 未使用 HTTP Post 传递部分参数值

标签 c# wcf web-services http post

我是 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 操作时,只有部分参数传递给服务。

我的请求 header 和正文如下所示:

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 的值始终不传递给服务。其他领域也不错。

非常感谢任何帮助。谢谢!

最佳答案

DataContract 序列化默认假设成员按字母顺序而不是声明顺序进行序列化,除非您指定 [DataMember] 属性的 Order 属性值来显式控制排序。

看起来您发送的消息与这两种格式都不匹配,因此可能发生的情况是序列化程序假设某些元素丢失,并且无序的元素是额外的元素,它不知道该元素在哪里放入 CLR 类中。

因此,要么修复您的请求,使元素按字母顺序排列,要么更改数据契约中的顺序以匹配您的输入消息。

关于c# - 未使用 HTTP Post 传递部分参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2067642/

相关文章:

c# - 将 Dictionary<string, object> 转换为具有键的对象集合

c# - 如何使用证书保护 3 跳 WCF 门面服务?

web-services - API throttle 最佳实践

wcf - TCP WCF 服务未执行 Application_Start

php - 停止数据库读取阻止 web ui 渲染

java.lang.ClassNotFoundException : org. 代码豪斯.jackson.JsonFactory

c# - 在 CsvHelper.CsvWriter 中手动添加标题

C# 将焦点属性应用于 FlowLayoutPanel,如按钮行为

c# - JSON序列化属性名称以特殊字符开头的匿名对象

c# - WCF 内存急剧增加