C# WinPhone: POST и GET запросы

Сегодня я решил начать писать о новом для меня направлении — программирование для мобильных устройств, а точнее для 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;
});
Запись опубликована в рубрике C# Windows Phone с метками , , , , , , , , , , . Добавьте в закладки постоянную ссылку.