Мне нужно создать приложение для Windows Phone 7. Для этого я использовал Windows Phone 7 SDK с Visual Studio 2010 в нём.
В этом приложении мне нужно отправлять json post-запросы на сервер. Для сего дела я использовал вот этот гайд
https://code.msdn.microsoft.com/windowsapps/Window...
Ибо стандартные методы у меня отсутствовали.
Я решил использовать оба метода с webclient и httpwebrequest. Для начала мне нужно было отправить данные вводимые пользователем для авторизации и получать в виде данных пользователя и его ключ для выполнения других запросов.
Данные сервер требовал в виде : "Метод, ключ пользователя, параметры", а отвечал в виде статуса запроса ("ОК" или "Ошибка") и прочие параметры.
Для работы с Json-ом я использовал стороннюю библиотеку от Newtonsoft
В итоге у меня получилось вот что.
public static class Method
{
static object root = null;
static string Login = null;
static string Pass = null;
private static void Wbc_UploadCompleted(object sender, UploadStringCompletedEventArgs e)
{
if (!string.IsNullOrEmpty(e.Result))
{
try
{
root = JsonConvert.DeserializeObject(e.Result);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
public static AuthorizedAnswer Authorizewbc(string login, string pass)
{
Uri URI = new Uri("http://bistrodrive.azurewebsites.net/api`");
Request req = new Request();
req.Method = "login";
req.Parameters = new Dictionary<string, string>();
req.Parameters.Add("login", login);
req.Parameters.Add("password", pass);
string myParameters = JsonConvert.SerializeObject(req);
WebClient wc = new WebClient();
//wc.Encoding = Encoding.UTF8;
wc.Headers["Content-Type"] = "application/json";
wc.Headers["Accept"] = "application/json";
wc.Headers["X-Accept"] = "application/json";
wc.UploadStringCompleted += Wbc_UploadCompleted;
wc.UploadStringAsync(URI, "POST", myParameters);
while (root == null) { }
return root as AuthorizedAnswer;
}
public static AuthorizedAnswer Authorizewbr(string login, string pass)
{
Login = login;
Pass = pass;
string AuthServiceUri = "http://bistrodrive.azurewebsites.net/api";
HttpWebRequest spAuthReq = HttpWebRequest.Create(AuthServiceUri) as HttpWebRequest;
spAuthReq.ContentType = "application/json";
spAuthReq.Method = "POST";
spAuthReq.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), spAuthReq);
spAuthReq.Headers["X-Accept"] = "application/json";
while (root == null) { }
return root as AuthorizedAnswer;
}
static void GetRequestStreamCallback(IAsyncResult callbackResult)
{
HttpWebRequest myRequest = (HttpWebRequest)callbackResult.AsyncState;
Request req = new Request();
Stream postStream = myRequest.EndGetRequestStream(callbackResult);
req.Method = "login";
req.Parameters = new Dictionary<string, string>();
req.Parameters.Add("login", Login);
req.Parameters.Add("password", Pass);
string postData = JsonConvert.SerializeObject(req);
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
postStream.Write(byteArray, 0, byteArray.Length);
postStream.Close();
myRequest.BeginGetResponse(new AsyncCallback(GetResponsetStreamCallback), myRequest);
}
static void GetResponsetStreamCallback(IAsyncResult callbackResult)
{
try
{
HttpWebRequest request = (HttpWebRequest)callbackResult.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(callbackResult);
string responseString = "";
Stream streamResponse = response.GetResponseStream();
StreamReader reader = new StreamReader(streamResponse);
responseString = reader.ReadToEnd();
streamResponse.Close();
reader.Close();
response.Close();
string result = responseString;
root = JsonConvert.DeserializeObject(result);
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
}
}
public class AuthorizedAnswer
{
public String Status { get; set; }
public List<String> Result { get; set; }
}
public class Request
{
public string Method { set; get; }
public Dictionary<string,string> Parameters { set; get; }
public string Token { set; get; }
}
}
В результате сервер просто не отправлял ответ. Почему - понятия не имею.