Я работаю над Windows Universal. В этом приложении я должен показать веб-сайт в веб-просмотре, для которого требуется аутентификация. Я обращаюсь к нему следующим образом:
Uri url = new Uri("https://ssl.mywebsite.nl/");
HttpWebRequest http = (HttpWebRequest)HttpWebRequest.Create(url);
http.Credentials = new NetworkCredential(userName, userPassword);
HttpWebResponse response = (HttpWebResponse)await http.GetResponseAsync();
webView.Source = response.ResponseUri;
И это отлично работает на Windows Phone. Тем не менее, на окнах появляется экран, в котором я спрашиваю:
"Сервер ssl.mywebsite.nl запрашивает ваше имя пользователя и пароль. Сервер сообщает, что он из" Пожалуйста, войдите ".
Это ошибка в Windows 8.1, или я пропущу что-то очень очевидное?
Поэтому я считаю, что причина, по которой это работала на Windows Phone, но не на рабочем столе Windows, заключалась в том, что она кэшировала учетные данные на Windows Phone, но не в Windows. Это привело к успешным попыткам проверки подлинности Windows Phone. И из-за того, как я пытался отобразить извлеченную информацию в WebView, это означало, что она должна была повторно аутентифицироваться, что привело к успешному отображению на Windows Phone, но не удалось отобразить (или, скорее, вопрос для аутентификации) в Windows.
Решение:
string encoded = Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1")
.GetBytes(userName + ":" + userPassword));
HttpRequestMessage mess = new HttpRequestMessage(HttpMethod.Get,
new Uri("https://ssl.mywebsite.nl/"));
mess.Headers.Add("Authorization", "Basic " + encoded);
webView.NavigateWithHttpRequestMessage(mess);
Этот метод позволяет запросу всегда использовать данные учетные данные, поэтому не просит пользователя предоставить их.