代码之家  ›  专栏  ›  技术社区  ›  Julian de Wit

silverlighthttppost几个变量,最简单的例子(最少的代码)

  •  6
  • Julian de Wit  · 技术社区  · 14 年前

    你好,我想发布一些数据从silverlight到一个网站。
    我发现如下 link 而且很有效。。。
    这个例子太复杂了,我的眼睛都痛了。
    也。。flex示例更简洁/代码更少。。

    供参考。。我们发布2个变量(字符串)并读取结果(字符串)。

       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. }  
    
    2 回复  |  直到 14 年前
        1
  •  7
  •   Denis    14 年前

    您可以使用WebClient发送表单数据。如果你不关心成功的确认,那么它将非常短暂:

    WebClient wc = new WebClient();
    wc.Headers["Content-type"] = "application/x-www-form-urlencoded";
    wc.UploadStringAsync(new Uri(postUrl), "POST", "val1=param1&val2=param2");
    
        2
  •  3
  •   Zakus    14 年前

    什么部位特别伤眼睛?更少的代码?您可以使用event将所有这些都包装到一个helper类中,并且您将拥有与sample相同的行数。没有flex示例,只有AS3 sample=)。AS3变体是相同的,只是(由adobe)包装为单个类,在外部只有一个回调。我还想提醒你,这不是一个很好的同步请求,这是异步的,而且总是很难看(IMHO)。而且silverlight中没有同步网络,所以我认为您应该习惯它。