2013-10-28 62 views
0

我連接到服務器使用基本身份驗證,之後我打電話網頁視圖的URL與下面的代碼後,再次顯示Loginscreen -Window,但我已經登錄。爲什麼會發生這種情況? 我該如何預防?的WebView通過基本身份驗證的登錄與HttpClient的

我的方式對服務器的身份驗證:

private async void HttpClientCall(object sender, RoutedEventArgs e) 
{ 

    System.Diagnostics.Debug.WriteLine(this.GetType().Name + ": HTTPCLientCall entered"); 

    //System.Diagnostics.Debug.WriteLine("NetworkConnectivityLevel.InternetAccess: " + NetworkConnectivityLevel.InternetAccess); 

    //use this, for checking the network connectivity 
    System.Diagnostics.Debug.WriteLine("GetIsNetworkAvailable: " + System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()); 

    //var msg = new Windows.UI.Popups.MessageDialog("GetIsNetworkAvailable: " + System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()); 
    //msg.ShowAsync(); 


    HttpClient httpClient = new HttpClient(); 


    // Assign the authentication headers 
    httpClient.DefaultRequestHeaders.Authorization = CreateBasicHeader("username", "password"); 
    System.Diagnostics.Debug.WriteLine("httpClient.DefaultRequestHeaders.Authorization: " + httpClient.DefaultRequestHeaders.Authorization); 


    // Call out to the site 
    HttpResponseMessage response = await httpClient.GetAsync("https://URLHere"); 
    System.Diagnostics.Debug.WriteLine("response: " + response); 
    string responseAsString = await response.Content.ReadAsStringAsync(); 
    System.Diagnostics.Debug.WriteLine("response string:" + responseAsString); 

    //WebViewP.Source = new Uri("https://URLHere"); 
} 




public AuthenticationHeaderValue CreateBasicHeader(string username, string password) 
{ 
    byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(username + ":" + password); 

    String logindata = (username + ":" + password); 
    System.Diagnostics.Debug.WriteLine("AuthenticationHeaderValue: " + new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray))); 

    return new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray)); 
} 

那麼我怎樣才能解決?

+0

有可能是服務器設置一些身份驗證Cookie做出的。使用fiddler並在服務器響應中查找set-cookies標頭。如果是這樣,那麼你可以清除cookie容器,以防止被「登錄」。 –

+0

我不想阻止被「登錄」。我想保持登錄狀態。當httpClient完成授權後,我想導航/顯示頁面。如果服務器設置了一個cookie,我該怎麼做?保存該cookie,然後再次調用該頁面?還是有另一種方式來授權時調用webView? – brush51

回答

0

這是一個很長的一段時間,但你可以嘗試在HttpClientHandler上設置憑據,並希望WebView將它取出。

var handler = new HttpClientHandler(); 
handler.Credentials = new NetworkCredential(username,password); 
HttpClient httpClient = new HttpClient(handler); 

問題是的WebView正在它自己的獨立請求權,所以你與HttpClient的任何請求都獨立於由的WebView

+0

對你來說很好,先生,我是C#新手,我對你的回答有幾個問題,我當然希望你能花一分鐘回答他們。首先,自UWP以來有兩個HttpClient類,一個來自System命名空間,另一個來自Windows,你在代碼片段中提到了哪一個?其次,在什麼情況下WebView會選擇HttpClient?據我可以告訴你只是初始化一個HttpClient而不提及代碼中的WebView。 –