C# HttpWebRequest GET请求在处理时停止
我正试图通过正在使用的Windows Mobile应用程序向我的后端发出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
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除此之外,您是否了解请求在处理过程中崩溃的原因?