在WebClient wp7中重定向时获取当前的Uri

时间:2011-08-01 14:37:47

标签: windows-phone-7 uri webclient

我希望我不会开始已经完成的话题,但我在这里找不到任何正确的答案,也没有找到任何其他答案。 所以我们走了: 我使用WebClient从网页下载HTML代码,然后我用该WebClient发送新请求,WebPage重定向我。现在我想要网站给我的地方。

WebClient类本身没有任何合适的属性,我已经尝试重写该类,以便我可以获得响应URI但不知何故它对wp7不起作用。

那么任何想法如何获取我的WebClient重定向的URI?或者当我想使用我自己的类时,应该知道应用程序崩溃的原因:

    public class MyWebClient : WebClient
    {
            Uri _responseUri;

            public Uri ResponseUri
            {
                get { return _responseUri; }
            }
            protected override WebResponse GetWebResponse(WebRequest request, IAsyncResult result)
            {
                WebResponse response = base.GetWebResponse(request, result);
                _responseUri = response.ResponseUri;
                return response;
            }
        }
}

提前致谢!

2 个答案:

答案 0 :(得分:2)

HttpWebRequest就是这里的解决方案,因为WebClient无论如何都是它的包装器。这样的事情应该适合您的具体情况:

private HttpWebRequest request;
private bool flagIt = true;

public MainPage()
{
    InitializeComponent();

    request = (HttpWebRequest)WebRequest.Create("http://google.com");
    request.BeginGetResponse(new AsyncCallback(GetData), request);
}

public void GetData(IAsyncResult result)
{
    HttpWebRequest request = (HttpWebRequest)result.AsyncState;
    HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result);

    Debug.WriteLine(response.ResponseUri.ToString());

    if (flagIt)
    {
        request = (HttpWebRequest)WebRequest.Create("http://microsoft.com");
        request.BeginGetResponse(new AsyncCallback(GetData), request);
        flagIt = false;
    }
}

我在主页面构造函数中启动请求,然后我在回调中处理它。请注意我如何获得ResponseUri - 您的最终目的地。

如果您不想阻止重定向并只是获取网址,则无需处理AllowAutoRedirect,就像我在上面的代码段中所做的那样。

答案 1 :(得分:1)

使用HttpWebRequest代替WebClient并将AllowAutoRedirect设置为false。

这也很有帮助 Getting the location from a WebClient on a HTTP 302 Redirect?