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

C# 在C中通过WebClient将JSON发布到URL#,c#,webclient,C#,Webclient,我有一些JavaScript代码需要转换成C。我的JavaScript代码向已创建的web服务发布一些JSON。此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: "appli

我有一些JavaScript代码需要转换成C。我的JavaScript代码向已创建的web服务发布一些JSON。此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");
}
using (WebClient client = new WebClient())
{
  string json = "?";
  client.UploadString("http://www.mysite.com/1.0/service/action", json);
}
我正在想办法把它转换成C。我的应用程序正在使用.NET 2.0。据我所知,我需要做如下事情:

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");
}
using (WebClient client = new WebClient())
{
  string json = "?";
  client.UploadString("http://www.mysite.com/1.0/service/action", json);
}
我在这一点上有点卡住了。我不确定
json
应该是什么样子。我不确定是否需要设置内容类型。如果我这样做了,我不知道该怎么做。我还看到
上传数据
。所以,我不确定我是否使用了正确的方法。从某种意义上说,我的数据序列化是我的问题

有人能告诉我我错过了什么吗


谢谢大家!

您需要一个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();
var baseAddress=”http://www.example.com/1.0/service/action";
var http=(HttpWebRequest)WebRequest.Create(新Uri(baseAddress));
http.Accept=“application/json”;
http.ContentType=“application/json”;
http.Method=“POST”;
字符串parsedContent=;
ascienceoding encoding=新的ascienceoding();
Byte[]bytes=encoding.GetBytes(解析内容);
Stream newStream=http.GetRequestStream();
newStream.Write(字节,0,字节,长度);
newStream.Close();
var response=http.GetResponse();
var stream=response.GetResponseStream();
var sr=新的流阅读器(流);
var content=sr.ReadToEnd();

希望有帮助,

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

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

PS:在大多数.net实现中,但是WebClient是IDisposable的,所以当然最好对其进行“使用”或“处置”。但是在这种特殊情况下。

以下示例演示如何通过发布JSON:

先决条件:


“parsedContent”应该是什么样子?不幸的是,在这个场景中,我需要手动创建JSON。谢谢。它能看起来像JSON吗?或者我需要做一些特殊的编码,这是我的意思。@EelsFan通常选择任何JSON解析器都不是问题,你总是可以用JSON.Net将.Net对象解析成JSON,但根据我的经验,有些云服务有不同的JSON解析器版本,我不得不做一些调整。做最适合您的场景的事情,本讨论可能也会帮助您了解一些没有JSON的问题。Net为什么要使用AscienceODing,而不是UTF8?请参阅。+1我第一次使用
WebClient
尝试了类似于OP的操作,但没有成功。然后我尝试了这个解决方案,效果很好。我使用
UTF8Encoding
而不是
ascienceoding
来创建字节数组,因为我认为没有理由使用ASCII,这会以一种不可接受的方式减少可用字符。ASCII在字符集中只有127个字符。我认为如果您使用的是已完成的事件,则应该是UploadStringAsync。您可以省略
POST
参数,因为
UploadString
隐式使用此方法作为默认值。此外,您可能需要添加
client.Headers.add(HttpRequestHeader.Accept,“application/json”)
如果您希望返回
JSON
。WebClient是否实际实现了IDisposable?几年后我在.NET Framework 4.7.1中工作,但我没有看到它。@bubbleking我在WebClient上单击F12,看到它是一个组件,组件实现IDisposable
公共类WebClient:Component
公共类组件:MarshallByRefObject,IComponent,IDisposable
,为了使您的json“可读”:(在vb.net中)Dim json={“field1”:“value1”,“status”:“pending”,“objField”:{“field2”:true}}。ToString但将参数插入该json字符串中如何?