Сегодня я решил начать писать о новом для меня направлении — программирование для мобильных устройств, а точнее для 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;
});