我正在开发一款Windows Universal应用。在这个应用程序中,我必须在webview中显示一个需要身份验证才能访问的网站。我通过以下方式访问它:
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上运行得非常好。然而,在Windows上,我得到一个屏幕,要求我登录说:
“服务器ssl.mywebsite.nl正在询问您的用户名和密码。 服务器报告它来自请登录。“
这是Windows 8.1中的错误还是我遗漏了一些非常明显的错误?
答案 0 :(得分: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);
此方法允许请求始终使用给定的凭据,因此不要求用户提供它们。