【发布时间】:2012-12-06 12:11:02
【问题描述】:
我正在尝试在 WP7 中创建多个连续的 HttpWebRequest。每个都使用前一个的信息(来自 cookie 的 ID、重定向的 URL 位置、一些 HTML ......),因此我们需要“等待”直到前一个完成才能继续。 在 Android 中,我们创建一个新线程,然后您使用多个同步 HttpPost 或 HttpGet 顺序执行,但由于 Silverlight 的异步特性,这里有所不同。
我现在拥有的是我的帮助类(在 UI 线程上实例化):
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(theUrl);
request.Method = "POST";
try
{
IAsyncResult ias = request.BeginGetResponse(new AsyncCallback(getCookiesStatus), request);
}
catch (Exception e)
{
Console.Write("ERROR" + e.Message);
}
getCookieStatus:
private void getCookiesStatus(IAsyncResult result)
{
HttpWebRequest request = (HttpWebRequest)result.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result);
ccCookies = response.Cookies;
HttpStatusCode sc = response.StatusCode;
if (sc == HttpStatusCode.Found)
{
location = response.Headers["Location"];
}
}
在不将函数调用链接到函数的情况下,使用“位置”字符串进行另一个连续的 http 请求的最佳方法是什么?有什么方法可以在 IAsyncResult 之后在 UI 线程中引发“唤醒”(事件?)?
【问题讨论】:
-
我很好奇,你有理由相信 HTTP 堆栈不会自动跟随 302 响应吗?顺便说一句,有关排序 HttpWebRequest 的一般解决方案,请参阅:geekswithblogs.net/codingbloke/archive/2011/09/10/…
-
这只是一个简化的例子。在该位置的 URL 中,我获得了 GET 中传递给下一页的 SessionID 的值,该页面有一个用于登录的 FORM,我直接创建而无需通过 302。
标签: silverlight windows-phone-7 httpwebrequest