我正在开发使用WebBrowser控件的Windows Phone 8应用程序。网络浏览器控制+身份验证
当我将WebBrowser控件导航到经过NTLM验证的网站时,没有任何反应。唯一的事件是导航,控件保持白色,Navigated和NavigationFailed事件都不会触发。
当我使用系统提供的网络浏览器应用程序导航到同一网站时,它会显示一个弹出窗口,询问用户名,密码和域。
如何在我的应用程序中使用WebBrowser控件实现类似的行为?
我正在开发使用WebBrowser控件的Windows Phone 8应用程序。网络浏览器控制+身份验证
当我将WebBrowser控件导航到经过NTLM验证的网站时,没有任何反应。唯一的事件是导航,控件保持白色,Navigated和NavigationFailed事件都不会触发。
当我使用系统提供的网络浏览器应用程序导航到同一网站时,它会显示一个弹出窗口,询问用户名,密码和域。
如何在我的应用程序中使用WebBrowser控件实现类似的行为?
我只找到基本HTTP身份验证的解决方法。
为了检测这种情况,我在浏览Web浏览器之前发出HEAD HTTP请求。
如果没有异常发生,我将浏览器导航到该URI。
如果发生异常,我会捕获WebException,获取e.Response.Headers集合,并检查WWW-Authenticate值。如果该值不是空的,我得出结论服务器要求认证。
如果WWW-Authenticate值以“basic”开头,我使用我自己的弹出控件向用户请求凭证。 然后我通过发出一个HEAD请求来验证证书,这次设置webClient.Credentials = new NetworkCredential(user,pass);
如果他们就好了,我用下面的方法终于凭据传递到Web浏览器控件:
public static Uri addCredsToUri(Uri u, string user, string pass)
{
UriBuilder uriSite = new UriBuilder(u);
uriSite.UserName = user;
uriSite.Password = pass;
return uriSite.Uri;
}
然而,如果WWW验证值以“谈判”,即服务器使用NTLM身份验证,我不知道如何将证书传递给Web浏览器。至少我检测到这种情况,并向我的最终用户显示适当的错误消息,告诉他/她不支持NTLM身份验证。
您可以使用您的身份验证信息导航浏览器作为postdata。
浏览器控件有过载方法导航接受postdata
NTLM比请求中包含一些数据更复杂,它是质询 - 响应协议:http://blogs.msdn.com/b/chiranth/ archive/2013/09/21/ntlm-want-know-how-it-works.aspx 我严重怀疑你可以在发布数据中提供凭证。 – Soonts
嗨,你有任何解决这个问题?如果是,请将其作为答案发布。 – asitis
请看我的回答 – Soonts