POST JSON 使用 WebClient C# 的网络服务
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}
现在,当我对桌面应用程序中的 post 数据使用相同的请求字符串时,名称、电子邮件和订阅等所有属性都已保存,但未保存兴趣和扇区。
我想弄清楚为什么相同的请求对象通过 jquery 而不是在 C# webclient 中工作。
这是我用来 post 使用 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 服务的任何代码或文档。
更新
根据 Jasen 的评论,这里是用 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§ors=%5B%221%22%2C%222%22%5D&subscribe=false
网络客户端请求
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}
我可以像在 jquery 请求中看到的那样,将我的网络客户端请求作为 URL 编码字符串发送吗?
最后在fiddler的帮助下得到了解决方案。感谢 Jasen 建议 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 声明。
我正在开发一个桌面应用程序,它通过 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}
现在,当我对桌面应用程序中的 post 数据使用相同的请求字符串时,名称、电子邮件和订阅等所有属性都已保存,但未保存兴趣和扇区。
我想弄清楚为什么相同的请求对象通过 jquery 而不是在 C# webclient 中工作。
这是我用来 post 使用 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 服务的任何代码或文档。
更新
根据 Jasen 的评论,这里是用 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§ors=%5B%221%22%2C%222%22%5D&subscribe=false
网络客户端请求
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}
我可以像在 jquery 请求中看到的那样,将我的网络客户端请求作为 URL 编码字符串发送吗?
最后在fiddler的帮助下得到了解决方案。感谢 Jasen 建议 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 声明。