【问题标题】:HttpWebRequest GET request stops while processingHttpWebRequest GET 请求在处理时停止
【发布时间】:2016-04-01 17:04:48
【问题描述】:

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

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

【问题讨论】:

  • 您绝对不应该通过不安全的连接发送明文密码。
  • @LegionMammal978 除此之外,您是否看到请求在处理时崩溃的任何原因?

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


【解决方案1】:

您需要一直使用async。以下是重写事件处理程序的方法:

public async void LoginClick() {
    string result = await LoginUser(email, password);
}

我假设LoginClick 被委托引用到登录 按钮的Click 事件。请注意,我使用 async 修饰符修饰了该方法。另外,请注意代码现在是awaiting 由LoginUser 返回的Task。您可能希望使用LoginUserAsync 的约定,但这不是必需的。

将您的代码包装在 try/catch 块中的 LoginUser 方法中。在catch 块中设置断点以检查引发的任何异常。您可以查看HttpWebRequest和相关类型的文档,了解它们可能抛出的异常。

很有可能只使用正确的 async 代码就可以解决您的问题,因为调用 myTask.ResultmyTask.Wait() 会阻塞 UI 线程,这是您最可能遇到的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多