通过C#中的WebClient将JSON发布到URL

本文关键字:URL JSON 中的 WebClient 通过 | 更新日期: 2023-09-27 18:01:06

我有一些JavaScript代码需要转换为C#。我的JavaScript代码将一些JSON发布到已经创建的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应该是什么样子。我不确定是否需要设置内容类型。如果我这样做了,我不知道该怎么做。我还看到了UploadData。所以,我不确定我是否使用了正确的方法。从某种意义上说,我的数据的序列化是我的问题。

有人能告诉我我在这里缺了什么吗?

谢谢!

通过C#中的WebClient将JSON发布到URL

问题已经得到回答,但我认为我已经找到了更简单、更与问题标题相关的解决方案,它是:

var cli = new WebClient();
cli.Headers[HttpRequestHeader.ContentType] = "application/json";
string response = cli.UploadString("http://some/address", "{some:'"json data'"}");

PS:在大多数.net实现中,但并非所有WebClient都是IDisposable的,因此当然最好对其执行"using"或"Dispose"。然而,在这种特殊情况下,这并不是真正必要的

以下示例演示如何通过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库

您需要一个json序列化程序来解析您的内容,可能您已经拥有了它,对于你最初关于如何提出请求的问题,这可能是一个想法:

var baseAddress = "http://www.example.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();

希望它能有所帮助,