2011-08-01 28 views
3

我希望我不會啓動已完成的主題,但我在這裏沒有找到任何正確的答案,也沒有其他答案。 所以,我們去: 我使用WebClient從網頁下載HTML代碼,然後我發送一個新的請求與該WebClient和WebPage重定向我。現在我想現在網站已經放到了我的位置。在WebClient中重定向時獲取當前Uri wp7

WebClient類本身沒有任何合適的屬性,我已經嘗試重寫該類,以便我可以獲取Response 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

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,就像我在上面的代碼段中所做的那樣。

+0

那麼,因爲我的整個程序使用webclient,我試圖繞過HttpWebRequest(實際上我之前並不知道它很好)。 感謝您記錄良好的答案! :) – Constantin