2013-02-26 7 views
59

Ich habe einige JavaScript-Code, den ich in C# konvertieren muss. Mein JavaScript-Code sendet einen JSON an einen Webdienst, der erstellt wurde. Dieser JavaScript-Code funktioniert gut und sieht wie folgt aus:POST JSON zu URL über WebClient in C#

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"); 
} 

Ich versuche, herauszufinden, wie diese # zu C konvertieren. Meine App verwendet .NET 2.0. Von dem, was ich sagen kann, ich brauche so etwas wie die folgenden Funktionen ausführen:

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

ich an dieser Stelle ein wenig bin stecken. Ich bin mir nicht sicher, wie json aussehen sollte. Ich bin mir nicht sicher, ob ich den Inhaltstyp einstellen muss. Wenn ich das tue, bin ich mir nicht sicher, wie ich das machen soll. Ich sah auch UploadData. Ich bin mir also nicht sicher, ob ich überhaupt die richtige Methode verwende. In gewissem Sinne ist die Serialisierung meiner Daten mein Problem.

Kann mir jemand sagen, was ich hier vermisse?

Vielen Dank!

Antwort

54

Sie benötigen einen json Serializer Ihre Inhalte zu analysieren, haben Sie wahrscheinlich bereits haben, für Ihre erste Frage, wie man einen Antrag zu stellen, könnte dies eine Idee:

 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(); 

hoffe, es hilft,

+0

was soll "parsedContent" aussehen? Leider muss ich in diesem Szenario meinen JSON manuell erstellen. Vielen Dank. –

+0

Kann es einfach wie JSON aussehen? Oder muss ich eine Art spezielle Kodierung machen, auf die ich hinaus will. –

+0

@EelsFan ist normalerweise kein Problem, irgendeinen JSON-Parser zu wählen, Sie können JSON.Net immer ein .net-Objekt in JSON parsen, aber meiner Erfahrung nach gab es einige Cloud-Dienste, die eine andere JSON-Parser-Version hatten einige Verbesserungen. Tun Sie das Beste für Ihr Szenario, diese Diskussion könnte Ihnen auch helfen, einige Probleme ohne JSON.Net zu sehen http://stackoverflow.com/questions/9573119/how-to-parse-json-without-json-net-library –

137

die Frage ist schon beantwortet, aber ich denke, dass ich die Lösung gefunden haben, die einfacher und für die Frage Titel ist, hier ist es:

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

Und Ihre json zu machen": (in vb.net) Dim json = { "Feld1": "Wert1", "Status": "pending", "objField": { "field2": true} } .ToString – foxontherock

41

Das folgende Beispiel zeigt, wie ein JSON über WebClient.UploadString Method POST:

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); 
} 

Voraussetzungen: Json.NET library

+2

denke ich, dass UploadStringAsync sein sollte, wenn Sie verwenden das abgeschlossene Ereignis –

+0

Sie könnten das 'POST'-Argument weglassen, da' UploadString' implizit diese Methode als Standard verwendet. Außerdem können Sie 'cli hinzufügen ent.Headers.Add (HttpRequestHeader.Accept, "application/json"); 'wenn Sie' JSON' als Rückgabe erwarten. – jimasun