WebView Source - 自动身份验证

时间:2013-07-25 07:55:47

标签: c# windows-runtime windows-store-apps winrt-xaml

我正在寻找一种自动验证网站的方法。 我的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);     

还有其他办法吗?

1 个答案:

答案 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身份验证

希望它能帮助人们寻找解决这个问题的方法:)