使用WebClient C#将JSON POST到Web服务

时间:2015-10-26 18:33:44

标签: c# jquery json webclient

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

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

在网络应用程序中,我正在调用这样的Web服务

Limit()

我stingify我的json对象是accountModel,我的请求在console.log

时看起来像这样
st.replaceFirst(st.subSequence(0,1).toString(),st.subSequence(0,1).toString().toUpperCase().codePoints().forEach(e -> System.out.print((char)e));

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

我想弄清楚为什么同一个请求对象通过jquery而不是C#webclient工作。

以下是我用于使用WebClient发布数据的代码

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

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

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

更新

根据Jasen的评论,这里是用fiddler

捕获的请求

JQuery请求

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

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);

我可以将我的webclient请求发送为URL编码字符串,就像我们在jquery请求中看到的一样吗?

1 个答案:

答案 0 :(得分:0)

最后,我在小提琴手的帮助下得到了解决方案。感谢Jasen建议小提琴手查看请求

这是我的工作代码

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声明。