- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在执行一个 Web 请求以登录我的 Web 服务,但我遇到了问题。我需要等到登录完成才能结束启动登录的方法,因为我需要返回一个 bool 值来表示登录是否正确。在下面的代码中,我在需要等待“httpWebRequest.BeginGetResponse(...)”结果的地方添加了注释
public async Task<bool> login(string user, string passwrd)
{
mLoginData.setUserName(user);
mLoginData.setPasswd(passwrd);
string serviceURL = mBaseURL + "/pwpcloud/service/user/login";
//build the REST request
// HTTP web request
var httpWebRequest = (HttpWebRequest)WebRequest.Create(serviceURL);
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
// Write the request Asynchronously
using (var stream = await Task.Factory.FromAsync<Stream>(httpWebRequest.BeginGetRequestStream, httpWebRequest.EndGetRequestStream, null))
{
string parameters = "{\"username\":\"" + user + "\",\"password\":\"" + passwrd + "\"}";
byte[] byteArray = Encoding.UTF8.GetBytes(parameters);
// Write the bytes to the stream
await stream.WriteAsync(byteArray, 0, byteArray.Length);
}
//httpWebRequest.BeginGetResponse(new AsyncCallback(OnGettingLoginResponse), httpWebRequest);
httpWebRequest.BeginGetResponse(r =>
{
using (HttpWebResponse response = (HttpWebResponse)httpWebRequest.EndGetResponse(r))
{
string data;
// Read the response into a Stream object.
Stream responseStream = response.GetResponseStream();
using (var reader = new StreamReader(responseStream))
{
data = reader.ReadToEnd();
}
responseStream.Close();
if (response.StatusCode == HttpStatusCode.OK)
{
dynamic jsonData = JObject.Parse(data);
string token = jsonData.token;
mLoginData.setToken(token);
string userId = jsonData.userId;
mLoginData.setUserID(userId);
mLoginData.setLogged(true);
//guardamos los valores en el isolatedStorageSettings para que persistan.
App.settings.Clear();
App.settings.Add("userId", mLoginData.getUserID());
App.settings.Add("token", mLoginData.getToken());
App.settings.Add("userName", mLoginData.getUserName());
App.settings.Add("passwd", mLoginData.getPasswd());
App.settings.Add("logged", mLoginData.isLogged());
App.settings.Save();
}
else
{
if (CultureInfo.CurrentUICulture.Name.ToString().Contains("ES"))
{
if (response.StatusCode == HttpStatusCode.Unauthorized || response.StatusCode == HttpStatusCode.BadRequest)
{
MessageBox.Show("Usuario o contraseña incorrectos");
}
else
{
MessageBox.Show("Error de conexión.");
}
}
else
{
if (response.StatusCode == HttpStatusCode.Unauthorized || response.StatusCode == HttpStatusCode.BadRequest)
{
MessageBox.Show("User or password were incorrect");
}
else
{
MessageBox.Show("NNetwork connection error");
}
}
}
}
}, null);
//here i need wait for the result of the webrequest to return true if the login was successfull.
return mLoginData.isLogged();
}
我读了很多关于这个 buf 的资料,但我没有找到解决方案。谢谢大家!!!
最佳答案
只需使用较新的异步样式:
using (var response = (HttpWebResponse) await request.GetResponseAsync())
{
...
}
您不需要调用 BeginXXX
现在很多 - 当然,Microsoft API 已经相当普遍地添加了对基于任务的异步模式的支持。
如果GetResponseAsync
不可用,请使用 Task.Factory.FromAsync
就像你对 BeginRequestStream
所做的一样:
var responseTask = Task.Factory.FromAsync<WebResponse>
(httpWebRequest.BeginGetResponse,
httpWebRequest.EndGetResponse,
null);
using (var response = (HttpWebResponse) await responseTask)
{
}
请注意,因为您正在编写 async
方法,初始方法调用将仍会快速完成 - 但它会返回 Task<bool>
只有在异步操作完成时才会完成。因此,您可能也应该在调用代码中等待结果。
关于c# - 如何等到使用 HttpWebRequest 的 Web 请求完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24649573/
我正在使用 HttpWebRequest 登录页面并获取一些信息。然后,我使用该信息创建一个新的 HttpWebRequest 以获取更多信息。我不想使用 WebClient。 如何将使用第一个 Ht
我有一个包含指向某些文件的链接的页面。 我基本上需要访问页面的源代码来解析它并获取文件的所有超链接。 我的代码是这样的(我在网上很多地方都找到了一些代码..): "private static
我正在编写一个渐进式下载器作为可移植类库 (Profile=24)。它将支持以字节 block 的形式部分下载目标文件。 HttpClient 不可用,我将使用 HttpWebRequest,它具有用
我正在努力在 HttpWebRequest 之上构建一个流畅的 REST 客户端界面。/HttpWebResponse .NET 中的类型。到目前为止,一切都很好......但是我正在尝试开发一个可插
我有一个用 VB.NET 编写的应用程序( 不是 asp.net,它是一个 Windows 控制台应用程序)。我正在尝试调用一个 url(一个 html 页面)并将响应返回到一个字符串中。响应是直接的
我尝试使用 C# HTTPWebRequest 类登录 amazon.com,我可以登录但无法读取 header 中的多个 set-cookie 当服务器响应多个“Set-Cookie:”-heade
我正在测试 Web 核心 API,但收到 500 内部服务器错误。 我的 Controller 上的方法是; [Route("api/property")] public class Property
假设我正在检索一个 url,如下所示: string url = "http://www.somesite.com/somepage.html" HttpWebRequest req = (HttpW
当我使用 HttpWebRequest.Headers.Add("Cookie",value) 与 HttpWebRequest.CookieContainer 和结果从 HttpWebRequest
我已阅读以下 2 篇文章并尝试实现相同的文章。 我的代码是这样的,超时发生在这里 HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
我正在寻找一种使用 httpWebRequest 从 url 下载 excel 文件并以某种方式解析它的方法 - 这是否意味着将其转换为 .csv 文件,以便我可以简单地使用 TextFieldPar
当我尝试序列化 HttpWebRequest 时出现以下错误 Type 'System.Net.KnownHttpVerb' in Assembly 'System, Version=2.0.0.0,
我目前正在下载一个 HTML 页面,使用以下代码: Try Dim req As System.Net.HttpWebRequest = DirectCast(WebRequest.Creat
我读了这个 MSDN 喜欢它并运行它的例子。 http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.useragent.a
我有一个 ASP.NET MVC 操作,它通过 HttpWebRequest 将 GET 请求发送到另一台服务器。我想在新请求中包含原始操作请求中的所有 cookie。原始请求中的一些 System.
我正在尝试抓取具有用户身份验证的网站。我能够执行POST来发送登录信息并存储Cookie。但是,登录后,尝试访问 protected 页面时出现403错误。 $url = "https://some_
我正在使用 HttpWebRequest ,并且正在处理响应流。 HttpWebRequest是否有正确的处理方法? ,因为它不包含 close 或 dispose 方法? 最佳答案 如果该类有特殊的
我在REST服务中抛出一个错误,例如: throw new WebFaultException("bla bla bla", HttpStatusCode.HttpVersionNotSuppo
问题:此控制台应用调用 Azure 上托管的长时间运行的网页两次。我希望它只调用一次。 控制台应用程序因捕获的异常而失败:基础连接已关闭:接收时发生意外错误。 so question 如果我从 Chr
我试图弄清楚我的网络请求在最终到达最终内容之前被重定向了多少次。 我正在创建我的网络请求,如下所示: var httpRequest = (HttpWebRequest) WebRequest.Cre
我是一名优秀的程序员,十分优秀!