在C#中通过WebClient将JSON发布到URL
我有一些JavaScript代码,我需要转换为C#。 我的JavaScript代码将一些JSON POST到已创build的Web服务。 此JavaScript代码工作正常,如下所示:
var vm = { k: "1", a: "2", c: "3", v: "4" }; $.ajax({ url: "http://www.mysite.com/1.0/service/action", type: "POST", data: JSON.stringify(vm), contentType: "application/json;charset=utf-8", success: action_Succeeded, error: action_Failed }); function action_Succeeded(r) { console.log(r); } function log_Failed(r1, r2, r3) { alert("fail"); }
我想弄清楚如何将其转换为C#。 我的应用程序正在使用.NET 2.0。 从我可以告诉我,我需要做的事情如下:
using (WebClient client = new WebClient()) { string json = "?"; client.UploadString("http://www.mysite.com/1.0/service/action", json); }
我有点卡在这一点上。 我不确定json
应该是什么样子。 我不确定是否需要设置内容types。 如果我这样做,我不知道该怎么做。 我也看到了UploadData
。 所以,我不确定我是否使用了正确的方法。 从某种意义上说,我的数据的序列化是我的问题。
有人能告诉我我在这里错过了什么吗?
谢谢!
你需要一个json序列化程序来parsing你的内容,可能你已经拥有它了,关于如何提出请求的初始问题,这可能是一个想法:
var baseAddress = "http://www.mysite.com/1.0/service/action"; var http = (HttpWebRequest)WebRequest.Create(new Uri(baseAddress)); http.Accept = "application/json"; http.ContentType = "application/json"; http.Method = "POST"; string parsedContent = <<PUT HERE YOUR JSON PARSED CONTENT>>; ASCIIEncoding encoding = new ASCIIEncoding(); Byte[] bytes = encoding.GetBytes(parsedContent); Stream newStream = http.GetRequestStream(); newStream.Write(bytes, 0, bytes.Length); newStream.Close(); var response = http.GetResponse(); var stream = response.GetResponseStream(); var sr = new StreamReader(stream); var content = sr.ReadToEnd();
希望能帮助到你,
这个问题已经得到解答,但是我想我已经find了更简单,更相关于问题标题的解决scheme,这里是:
var cli = new WebClient(); cli.Headers[HttpRequestHeader.ContentType] = "application/json"; string response = cli.UploadString("http://some/address", "{some:\"json data\"}");
以下示例演示如何通过WebClient.UploadString方法 POST JSON 方法 :
var vm = new { k = "1", a = "2", c = "3", v= "4" }; using (var client = new WebClient()) { var dataString = JsonConvert.SerializeObject(vm); client.Headers.Add(HttpRequestHeader.ContentType, "application/json"); client.UploadString(new Uri("http://www.contoso.com/1.0/service/action"), "POST", dataString); }
先决条件: Json.NET库