C# WebBrowser.Navigate();如何传递ntlm凭据

C# WebBrowser.Navigate();如何传递ntlm凭据,c#,winforms,webbrowser-control,windows-authentication,ntlm,C#,Winforms,Webbrowser Control,Windows Authentication,Ntlm,我已经创建了一个网页捕获实用程序,它通过一个httphandler运行,可以轻松访问公共站点并创建屏幕截图 问题:我试图访问一个本地Sharepoint网站,该网站需要NTLM凭据才能查看我试图截图的页面 当我执行WebBrowser.Navigate(Sharepointsite)时,我得到一个401挑战来通过凭证。现在,因为这是作为后台服务运行的,所以我需要自动传递凭据。此时,浏览器只是挂起并等待凭据。我已经研究了如何在头文件中传递凭据,这些头文件可以在导航方法中传递,但仍然没有运气 这是我

我已经创建了一个网页捕获实用程序,它通过一个httphandler运行,可以轻松访问公共站点并创建屏幕截图

问题:我试图访问一个本地Sharepoint网站,该网站需要NTLM凭据才能查看我试图截图的页面

当我执行WebBrowser.Navigate(Sharepointsite)时,我得到一个401挑战来通过凭证。现在,因为这是作为后台服务运行的,所以我需要自动传递凭据。此时,浏览器只是挂起并等待凭据。我已经研究了如何在头文件中传递凭据,这些头文件可以在导航方法中传递,但仍然没有运气

这是我执行函数的代码

ICredentials cred = new NetworkCredential(username, password, domain);
String authorisationHeader = String.Empty;
private bool Ping(string url)
{
    try
    {
        bool status;
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        req.Credentials = cred;
        req.AllowAutoRedirect = true;
        req.ContentType = "text/html";
        req.Accept = "*/*";
        req.KeepAlive = false;

        using (HttpWebResponse resp = (HttpWebResponse)req.GetResponse())
        {
            status = (resp.StatusCode.ToString() == "OK");
            WebHeaderCollection c = resp.Headers;
        }
        authorisationHeader = req.Headers.GetValues("Authorization")[0];
        return status;
    }
    catch
    {
        return false;
    }
}

public Bitmap GenerateScreenshot(string url, int width, int height)
{
    bool Active = Ping(url);
    if (Active)
    {
        // Load the webpage into a WebBrowser control
        wb.AllowNavigation = true;
        wb.AllowWebBrowserDrop = true;
        wb.Navigate(url, null, null, authorisationHeader);

        while (wb.ReadyState != WebBrowserReadyState.Complete)
        {
            Application.DoEvents();
        }
        //HANGS HERE IF THE SITE NEEDS AUTHENTICATION... Credentials aren't being passed through successfully. HELP!

        while (!isComplete)
        {
            Thread.Sleep(0);
        }
        wb.Dispose();
    }

    return bitmap;
}

如果有人能帮我自动登录到一个需要身份验证的网站,那将是令人惊讶的!干杯。

这可能是IE关于传递凭证的设置(因为web浏览器基本上是IE的一个实例)。因此,我会将此站点添加到计算机上的受信任站点,然后检查IE中受信任站点的用户身份验证->登录->使用当前用户名和密码设置的自动登录。

可能重复[Send credentials to WebBrowser]()谢谢。有时候,编写代码并不是解决问题的最佳方法——我必须记住这一点。