4

我正在寻找一种自动验证网站的方法。我的 c# Windows Store App 中有一个 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);     

还有其他方法吗?

4

1 回答 1

6

我遇到了同样的问题,但幸运的是找到了答案:) 这里的主要问题是 Windows 商店应用程序包含 2 个不同的 HttpClient

其中一个是我们从 c# 应用程序中知道的“经典”一个(自动使用),另一个是“新”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 身份验证

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

于 2015-10-17T12:58:25.080 回答