HttpWebRequest GET请求在处理时停止

时间:2015-12-27 18:30:13

标签: c# web-services rest azure windows-mobile

我正在尝试通过我正在处理的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;
}

为什么没有完成就结束了?我的代码有什么问题吗?

1 个答案:

答案 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.ResultmyTask.Wait()会阻止UI线程,这是您最可能遇到的问题。< / p>