POST JSON to webservice using WebClient C#



我正在开发一个桌面应用程序,它通过WebClient POST请求调用一些web服务。这些相同的web服务也用于web应用程序。

我正面临一个奇怪的问题,在我的桌面应用程序请求是成功的,我得到了响应,但我的一些请求参数没有保存。但是同样的请求是更新所有的参数,我们使用jquery从web应用程序调用它们。

在web应用程序中,我像这样调用web服务

$.post("/MyService/Account/Register",accountModel, function (data) {
});

并指定json对象为accountModel,请求是这样的console。log

{"Name":"Lorem","Email":"abc@abc.com","interest":"["1"]","sectors":"["1","2"]","subscribe":false}

现在,当我使用相同的请求字符串从我的桌面应用程序发布数据时,所有属性,如姓名,电子邮件和订阅都被保存,但兴趣和部门没有保存。

我想弄清楚为什么相同的请求对象是通过jquery工作,而不是在c# web客户端。

这是我的代码,我用来发布数据使用WebClient

WebClient client = new WebClient();    
string json = string.Format("{{"Name":"{0}","Email":"{1}","interest":"["{2}"]","sectors":"["{3}","{4}"]","subscribe":{5} }}","Lorem","abc@abc.com","1","1","2","false");
    client.Headers[HttpRequestHeader.ContentType] = "application/json";
    string result = client.UploadString("http://Server.com/MyService/Account/Register", json);

请有人帮助我解决这个问题,我没有得到任何错误,但我的一些参数没有更新。

我想澄清一下,我没有任何代码或文档访问web服务

根据jason的评论,这里是用fiddler捕获的请求

JQuery请求

POST http://Server.com/MyService/Account/Register HTTP/1.1
    Host: server.com
    Connection: keep-alive
    Content-Length: 463
    Accept: */*
    Origin: http://server.com
    X-Requested-With: XMLHttpRequest
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    Referer: http://server.com/MyService/Account/Register/
    Accept-Encoding: gzip, deflate
    Accept-Language: en-US,en;q=0.8
    Cookie: .ASPXAUTH=7A14FC68B72078BAE43A623B94A901180C72093CCE222BBD98EE2AE7E2612078D1E3B7D8860905A4F7B2D75FD67E9274A0A5C40760A5AF703F970504380EBAF8B3D09A15F0B70090ACF4882DC58885F7CF12473BF55647840F3080ADD2C19249
Name=Lorem&Email=abc@abc.com&interest=%5B%221%22%5D&sectors=%5B%221%22%2C%222%22%5D&subscribe=false

WebClient请求
POST http://server.com/MyService/Account/Register HTTP/1.1
Content-Type: application/json
Host:server.com
Cookie: .ASPXAUTH=F586C63F64186E13EB6EC19AAB25A531A0EDA5B7B601013550ADD629C1481EC3F080DDB5F06D691CB8F81EE8631EF8859F82CF7DD3F2ED2A597AA971A53E80141EDD6EA549784AD7EAE8E144F0CD3196A44316F29C08E0C5383A7231A1B6C5EF
Content-Length: 536
Expect: 100-continue
{"Name":"Lorem","Email":"abc@abc.com","sectors":["1","2"],"interest":["1"],"subscribe":false}

我应该发送我的webclient请求作为URL编码字符串,就像我们可以看到在jquery请求?

最后在fiddler的帮助下得到了解决方案。感谢jason建议fiddler查看请求

这是我的工作代码

WebClient client = new WebClient();
string result = client.UploadValues("http://Server.com/MyService/Account/Register", new NameValueCollection()
{
{"Name","Lorem"},
{"Email","abc@abc.com"},
{"interest","["1"]"},
{"sectors","["1","2"]"},
{"interest","false"}
});

是的,我使用了UploadValues方法而不是UploadData或UploadString。还请注意,我已经从代码中删除了内容类型json声明。

最新更新