Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HttpWebRequest GET请求在处理时停止_C#_Web Services_Rest_Azure_Windows Mobile - Fatal编程技术网

C# HttpWebRequest GET请求在处理时停止

C# HttpWebRequest GET请求在处理时停止,c#,web-services,rest,azure,windows-mobile,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 pa

我正试图通过正在使用的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;
}
public void LoginClick(){
var myTask=登录用户(电子邮件、密码);
字符串结果=myTask.result;
}
专用异步任务登录用户(字符串电子邮件、字符串密码)
{
//变量声明
字符串结果=”;
HttpWebRequest请求=(HttpWebRequest)WebRequest.Create(“http://MYmobileservice.azure-mobile.net/api/loginuser?email=“+电子邮件+”&密码=“+密码);
request.ContinueTimeout=4000;
request.Credentials=CredentialCache.DefaultNetworkCredentials;
//向请求添加标题
request.Headers[“Content Type”]=“application/json”;
request.Headers[“ACCEPT”]=“application/json”;
请求.头文件[“X-ZUMO-APPLICATION”]=“”;
使用(HttpWebResponse=(HttpWebResponse)wait request.GetResponseAsync())
{
if(response.StatusCode==System.Net.HttpStatusCode.OK)
{
//获得响应体
使用(streamResponse=response.GetResponseStream())
{
使用(StreamReader streamRead=新的StreamReader(streamResponse,Encoding.UTF8))
{
结果=streamRead.ReadToEnd();
}
}
}
}
返回结果;
}

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

您需要一直使用
async
。以下是如何重新编写事件处理程序:

public async void LoginClick() {
    string result = await LoginUser(email, password);
}
我假设
LoginClick
被一个代表引用到登录按钮的
Click
事件。注意,我用一个
async
修饰符修饰了这个方法。另外,请注意,代码现在正在等待
登录用户返回的
任务
。您可能希望使用
LoginUserAsync
的约定,但这不是必需的

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


很可能仅仅使用正确的异步代码就能解决您的问题,因为调用
myTask.Result
myTask.Wait()
将阻塞UI线程,这是您最有可能遇到的问题。

您绝对不应该通过不安全的连接发送明文密码。@legionammal978除此之外,您是否了解请求在处理过程中崩溃的原因?