C# web浏览器控件+;认证
我正在开发一个使用WebBrowser控件的WindowsPhone8应用程序 当我将WebBrowser控件导航到经过NTLM身份验证的网站时,不会发生任何事情。唯一的事件是导航,控件保持白色,并且未触发Navigated或NavigationFailed事件 当我使用系统提供的web浏览器应用程序导航到同一网站时,它会向我显示一个弹出窗口,询问用户名、密码和域C# web浏览器控件+;认证,c#,silverlight,windows-phone,webbrowser-control,http-authentication,C#,Silverlight,Windows Phone,Webbrowser Control,Http Authentication,我正在开发一个使用WebBrowser控件的WindowsPhone8应用程序 当我将WebBrowser控件导航到经过NTLM身份验证的网站时,不会发生任何事情。唯一的事件是导航,控件保持白色,并且未触发Navigated或NavigationFailed事件 当我使用系统提供的web浏览器应用程序导航到同一网站时,它会向我显示一个弹出窗口,询问用户名、密码和域 如何在我的应用程序中使用WebBrowser控件实现类似的行为?我只找到了基本HTTP身份验证的解决方法 为了检测这种情况,我在浏览
如何在我的应用程序中使用WebBrowser控件实现类似的行为?我只找到了基本HTTP身份验证的解决方法 为了检测这种情况,我在浏览web浏览器之前发出了HEAD HTTP请求 如果没有发生异常,我会将web浏览器导航到该URI 如果发生异常,我将捕获WebException,获取e.Response.Headers集合,并检查WWW Authenticate值。如果该值不为空,我推断服务器请求身份验证 如果WWW Authenticate值以“basic”开头,我将使用自己的弹出控件向用户请求凭据。 然后,我通过再发出一个HEAD请求来验证凭据,这次设置webClient.credentials=new NetworkCredential(用户,通过) 如果没有问题,我最终会使用以下方法将凭据传递给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在浏览器中导航
webbrowser控件具有重载方法navigate,该方法接受postdatahi,您有解决此问题的方法吗?如果是,请将其作为答案发布。请看我的回答比仅在请求中包含一些数据更复杂,这是挑战响应协议:我严重怀疑您能否在发布数据中提供凭据。您节省了我的时间!非常感谢。对我有用。唯一的问题是,如果用户包含反斜杠,它将抛出
UriFormatException