我正在尝试通过我正在处理的Windows Mobile应用程序向我的后端发出GET请求。请求在两者之间停止,并且没有通过。结束时没有错误。
这是我的代码:
public void LoginClick() {
var myTask = LoginUser(email, password);
string result = myTask.Result;
}
private async Task<string> LoginUser(string email, string password)
{
//Declarations of Variables
string result = "";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://MYmobileservice.azure-mobile.net/api/loginuser?email="+email+"&password="+password);
request.ContinueTimeout = 4000;
request.Credentials = CredentialCache.DefaultNetworkCredentials;
//Add headers to request
request.Headers["Content-Type"] = "application/json";
request.Headers["ACCEPT"] = "application/json";
request.Headers["X-ZUMO-APPLICATION"] = "<SERVER-KEY-THE-APP-NEEDS>";
using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync())
{
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
//To obtain response body
using (Stream streamResponse = response.GetResponseStream())
{
using (StreamReader streamRead = new StreamReader(streamResponse, Encoding.UTF8))
{
result = streamRead.ReadToEnd();
}
}
}
}
return result;
}
为什么没有完成就结束了?我的代码有什么问题吗?
答案 0 :(得分:2)
您需要一直使用async
。以下是重写事件处理程序的方法:
public async void LoginClick() {
string result = await LoginUser(email, password);
}
我假设LoginClick
被委托人引用到登录按钮的Click
事件。请注意,我使用async
修饰符修饰了方法。另请注意,代码现在是await
Task
返回的LoginUser
。您可能希望使用LoginUserAsync
的约定,但这不是必需的。
将代码包含在LoginUser
块中的try/catch
方法中。在catch
块中设置断点以检查抛出的任何异常。您可以查看HttpWebRequest
和相关类型的文档,了解它们可能会抛出的异常。
只需使用正确的异步代码就可以解决您的问题,因为调用myTask.Result
或myTask.Wait()
会阻止UI线程,这是您最可能遇到的问题。< / p>