C# 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控件的WindowsPhone8应用程序

当我将WebBrowser控件导航到经过NTLM身份验证的网站时,不会发生任何事情。唯一的事件是导航,控件保持白色,并且未触发Navigated或NavigationFailed事件

当我使用系统提供的web浏览器应用程序导航到同一网站时,它会向我显示一个弹出窗口,询问用户名、密码和域


如何在我的应用程序中使用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,该方法接受postdata

hi,您有解决此问题的方法吗?如果是,请将其作为答案发布。请看我的回答比仅在请求中包含一些数据更复杂,这是挑战响应协议:我严重怀疑您能否在发布数据中提供凭据。您节省了我的时间!非常感谢。对我有用。唯一的问题是,如果用户包含反斜杠,它将抛出
UriFormatException