96

C#に変換する必要のあるJavaScriptコードがいくつかあります。私のJavaScriptコードは、作成されたWebサービスにJSONをPOSTします。この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#に変換する方法を理解しようとしています。私のアプリは.NET2.0を使用しています。私が言えることから、私は次のようなことをする必要があります:

using (WebClient client = new WebClient())
{
  string json = "?";
  client.UploadString("http://www.mysite.com/1.0/service/action", json);
}

私はこの時点で少し立ち往生しています。どうあるjsonべきかわかりません。コンテンツタイプを設定する必要があるかどうかわかりません。もしそうなら、どうすればいいのかわかりません。私も見ましたUploadData。ですから、正しい方法を使っているのかどうかはわかりません。ある意味で、私のデータのシリアル化は私の問題です。

誰かが私がここで欠けているものを教えてもらえますか?

ありがとうございました!

4

3 に答える 3

205

質問はすでに回答されていますが、よりシンプルで質問のタイトルに関連する解決策を見つけたと思います。

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

PS: ほとんどの .net 実装では、すべてのWebClient が IDisposable であるわけではありません。そのため、もちろん、「使用」または「破棄」を行う方が適切です。ただし、この特定のケースでは、実際には必要ありません

于 2014-06-06T15:32:36.910 に答える
74

コンテンツを解析するには 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();

それが役に立てば幸い、

于 2013-02-26T14:29:15.613 に答える