Silverlight HTTP POST несколько переменных, пример SIMPLEST (наименьший код) - PullRequest
6 голосов
/ 16 августа 2010

Здравствуйте! Я хочу опубликовать некоторые данные из silverlight на веб-сайте.
Я нашел следующую ссылку , и она работает ...
Однако .... Этот пример был настолько сложным, что заставил мои глаза болеть.
Кроме того ... пример 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 ]

7 голосов
/ 16 августа 2010

Вы можете использовать WebClient для отправки данных формы.Если вам не нужно подтверждение успеха, оно будет очень коротким:

WebClient wc = new WebClient();
wc.Headers["Content-type"] = "application/x-www-form-urlencoded";
wc.UploadStringAsync(new Uri(postUrl), "POST", "val1=param1&val2=param2");
3 голосов
/ 16 августа 2010

Какая часть особенно болит глаза?Меньше кода?Вы можете обернуть все это в один вспомогательный класс с событием, и у вас будет столько же строк, сколько в примере в AS.И нет образца сгибания, есть образец AS3 =).Вариант AS3 такой же, только завернутый (по Adobe) в один класс, который имеет только один обратный вызов.И также я хочу напомнить вам, что это не старый добрый синхронный запрос, это асинхронный и всегда такой уродливый (ИМХО).И в silverlight нет синхронной сети, так что я думаю, что вы должны к этому привыкнуть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...