我正在寻找一种自动验证网站的方法。 我的c#Windows Store应用程序中有一个WebView,我想访问受密码保护的站点。
WebView.Source= new URI("http://UserId:Password@foo.com/");
这不起作用,因为我收到安全例外:
A security problem occurred. (Exception from HRESULT: 0x800C000E);
以下方法也无效,因为我只获取网站的html,但没有css或JavaScript:
HttpClientHandler handler = new HttpClientHandler();
handler.Credentials = new NetworkCredential("UserId", "Password");
HttpClient client = new HttpClient(handler);
string body = await client.GetStringAsync("http://foo.com");
webview.NavigateToString(body);
还有其他办法吗?
答案 0 :(得分:6)
我遇到了同样的问题,但幸运的是找到了答案:) 这里的主要问题是Windows商店应用程序包含2个不同的HttpClient
其中一个是"经典"我们从c#apps中知道的(自动使用),另一个是" new" HttpClient - 与WebView连接:)
贝娄是两种类型:
System.Net.Http.HttpClient
(经典之一)
Windows.Web.Http.HttpClient
(新的)
所以请记住声明新的One并执行类似下面的代码
var filter = new HttpBaseProtocolFilter();
filter.ServerCredential = new Windows.Security.Credentials.PasswordCredential("http://website","login", "password");
Windows.Web.Http.HttpClient client2 = new Windows.Web.Http.HttpClient(filter);
var response = await client2.GetAsync(new Uri("http://website"));
WebView.Source = new Uri("http://website");
现在请记住将登录名和密码更改为您要使用的凭据,并且网站是您要进行身份验证的网站。
从服务器获取响应非常重要 - 这将使用户通过身份验证@服务器,以便下次使用webView访问该站点时,您将进行身份验证
它适用于基本身份验证和NTLM身份验证
希望它能帮助人们寻找解决这个问题的方法:)