2010-08-16 5 views
6

Hallo Ich möchte einige Daten von Silverlight auf einer Website veröffentlichen.
Ich fand die folgenden link und es funktioniert ...
Allerdings .... Dieses Beispiel war so aufwendig, dass es meine Augen schmerzte.
.. Auch das flex Beispiel wurde viel sauberer/weniger Code ..

ich es sagen würde, eine bessere Lösung ... Silverlight HTTP POST einige Variablen, SIMPLEST Beispiel (am wenigsten Code)

Als Referenz

sein müssen .. Wir veröffentlichen zwei Variablen (Strings) und lesen aus dem Ergebnis (String).

Die Lösung aus dem Link:

1. // C# 
    2. // Create a request object 
    3. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(POST_ADDRESS, UriKind.Absolute)); 
    4. request.Method = "POST"; 
    5. // don't miss out this 
    6. request.ContentType = "application/x-www-form-urlencoded"; 
    7. request.BeginGetRequestStream(new AsyncCallback(RequestReady), request); 
    8. 
    9. // Sumbit the Post Data 
    10. void RequestReady(IAsyncResult asyncResult) 
    11. { 
    12.  HttpWebRequest request = asyncResult.AsyncState as HttpWebRequest; 
    13.  Stream stream = request.EndGetRequestStream(asyncResult); 
    14. 
    15.  // Hack for solving multi-threading problem 
    16.  // I think this is a bug 
    17.  this.Dispatcher.BeginInvoke(delegate() 
    18.  { 
    19.   // Send the post variables 
    20.   StreamWriter writer = new StreamWriter(stream); 
    21.   writer.WriteLine("key1=value1"); 
    22.   writer.WriteLine("key2=value2"); 
    23.   writer.Flush(); 
    24.   writer.Close(); 
    25. 
    26.   request.BeginGetResponse(new AsyncCallback(ResponseReady), request); 
    27.  }); 
    28. } 
    29. 
    30. // Get the Result 
    31. void ResponseReady(IAsyncResult asyncResult) 
    32. { 
    33.  HttpWebRequest request = asyncResult.AsyncState as HttpWebRequest; 
    34.  HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult); 
    35. 
    36.  this.Dispatcher.BeginInvoke(delegate() 
    37.  { 
    38.   Stream responseStream = response.GetResponseStream(); 
    39.   StreamReader reader = new StreamReader(responseStream); 
    40.  // get the result text 
    41.   string result = reader.ReadToEnd(); 
    42.  }); 
    43. } 

Antwort

7

Sie können WebClient verwenden, um Formulardaten zu senden. Wenn Sie nicht über eine Bestätigung des Erfolgs ist es egal, es wird sehr kurz sein:

WebClient wc = new WebClient(); 
wc.Headers["Content-type"] = "application/x-www-form-urlencoded"; 
wc.UploadStringAsync(new Uri(postUrl), "POST", "val1=param1&val2=param2"); 
+0

Das sieht viel besser aus. Ich werde es ausprobieren .. –

3

Welches Teil besonders weh tun Sie Augen? Weniger Code? Sie können all dies in eine Hilfsklasse mit Ereignis einfügen, und Sie werden die gleichen Zeilen als Beispiel auf AS zählen. Und es gibt keine Flexprobe, es gibt AS3 Probe =). AS3-Variante ist gleich, nur von Adobe als einzelne Klasse gewickelt, die außerhalb nur einen Rückruf haben. Und auch ich möchte dich daran erinnern, das ist nicht - alte gute synchrone Anfrage, das ist asynchron und es ist immer so hässlich (IMHO). Und es gibt kein synchrones Netzwerk in Silverlight, also denke ich, dass du daran gewöhnt sein solltest.

+0

In C# müssen Sie 2 asynch Rückrufe in AS3 nur 1. Da Daten veröffentlichen etwa so häufig wie das Drucken auf der Kommandozeile ist würde ich erwarten Sie, dass einige Helfer weniger Code haben ... –