小编典典

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

c#

我有一些JavaScript代码需要转换为C#。我的JavaScript代码将一些JSON
POST到已创建的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。因此,我不确定是否使用了正确的方法。从某种意义上说,我的数据序列化是我的问题。

有人可以告诉我我在这里想念的吗?

谢谢!


阅读 325

收藏
2020-05-19

共1个答案

小编典典

您需要一个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();

希望能帮助到你,

2020-05-19