Получить текущий Uri при перенаправлении в WebClient wp7 - PullRequest
3 голосов
/ 01 августа 2011

Я надеюсь, что я не начну тему, которая уже сделана, но я не нашел ни правильного ответа здесь, ни кого-либо еще.Итак, начнем: я использую WebClient для загрузки HTML-кода с веб-страницы, затем отправляю новый запрос с этим WebClient, и WebPage перенаправляет меня.Теперь я хочу узнать, куда меня поместил Сайт.

У самого класса WebClient нет подходящих свойств, я уже пытался переписать класс, чтобы получить ответный URI, но почему-то он не работает для wp7.

Любые идеи, как получить URI, где мой WebClient был перенаправлен?Или любая идея, почему приложение падает, когда я хочу использовать свой собственный класс:

    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 ]

2 голосов
/ 02 августа 2011

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, если вы не хотите блокировать перенаправление и просто получать URL, как я делаю вфрагмент выше.

1 голос
/ 01 августа 2011

Используйте HttpWebRequest вместо WebClient и установите AllowAutoRedirect в false.

Также это может быть полезно Получение местоположения из WebClient по HTTP 302 Redirect?

...