Сегодня я решил начать писать о новом для меня направлении — программирование для мобильных устройств, а точнее для Windows Phone. И по традиции, в первую очередь, я решил сохранить для себя функции отправки POST и GET запросов, реализация которых отличается от привычной в C#.
Главное отличие POST и GET запросов при программировании на WinPhone что они могут выполняться только асинхронно. В связи с этим реализация данных запросов должна производится с применением callback функций.
Необходимы неймспейсы для данных реализаций:
using System.Windows; using System.Net; using System.IO;
GET запрос
public void Get(string url, string data, DownloadStringCompletedEventHandler success) { if (!NetworkInterface.GetIsNetworkAvailable()) { MessageBox.Show("Нет подключения к Интернету", "Ошибка", MessageBoxButton.OK); return; } WebClient client = new WebClient(); if (success != null) { client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(success); } client.DownloadStringAsync(new Uri(url + "?" + data)); } //////////Пример Get("http://mysite.com", "foo1=bar1&foo2=bar2", (o, e) => { string response = "Ответ сервера: " + e.Result; });
POST запрос
public void Post(string url, string data, Action<string> callback) { if (!NetworkInterface.GetIsNetworkAvailable()) { MessageBox.Show("Нет подключения к Интернету", "Ошибка", MessageBoxButton.OK); return; } HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url); webRequest.Method = "POST"; webRequest.ContentType = "application/x-www-form-urlencoded"; webRequest.BeginGetRequestStream((asynchronousResult) => { var webRequest2 = (HttpWebRequest)asynchronousResult.AsyncState; Stream postStream = webRequest2.EndGetRequestStream(asynchronousResult); byte[] byteArray = Encoding.UTF8.GetBytes(data); postStream.Write(byteArray, 0, byteArray.Length); postStream.Close(); webRequest2.BeginGetResponse((result) => { string responseString = null; try { var webRequest3 = (HttpWebRequest)result.AsyncState; using (var response = (HttpWebResponse)webRequest3.EndGetResponse(result)) using (var streamResponse = response.GetResponseStream()) using (var streamReader = new StreamReader(streamResponse)) { responseString = streamReader.ReadToEnd(); } } catch (WebException e) { MessageBox.Show(e.Message); } finally { if (callback != null) { callback(responseString); } } }, webRequest2); }, webRequest); } //////////Пример Post("http://mysite.com", "foo1=bar1&foo2=bar2", (serverResponse) => { string response = "Ответ сервера: " + serverResponse; });