为WebBrowser控件设置身份验证标头 - ASP.NET

7
我在我的ASP.NET应用程序中使用WebBrowser控件生成网页截图。更改应用程序池帐户后,我无法生成图片。我已经给了新的应用程序池所有必要的权限,并且我能够从IE中浏览我的页面。但是,当我通过编程方式导航到它时,我会得到401.2错误。我在我的IIS 7.0中设置了“失败请求跟踪规则”,并使用Fiddler来嗅探请求,发现身份验证头不正确。
但是,webbrowser.navigate有一个重载的方法,我们可以传递自定义的HTTP标头。如何设置它?我只想使用集成身份验证,并且不想在代码中提供用户名/密码,因为我可能不知道它。但是,我尝试了以下代码,没有成功。
System.Uri uri = new Uri(myUrl);
byte[] authData = System.Text.UnicodeEncoding.UTF8.GetBytes("user: passwd");
string authHeader = "Authorization: Basic " + Convert.ToBase64String(authData) + "\r\n";
myBrowser.Navigate(uri, "", null, authHeader);

有什么办法可以设置包含用户代理等其他详细信息的标头(header)吗?

1个回答

4

如果您想在头部中包含用户代理,则应该像这样做:

string authHeader = "Authorization: Basic " + Convert.ToBase64String(authData) + 
        "\r\n" + "User-Agent: MyUserAgent\r\n";

请记住,每个标题必须以回车换行对结束。


那只是一种直觉。如果我没有指定用户代理,我能否获得401生成?HTTP头中必须包含哪些内容? - NLV
@NLV:我不确定你的情况需要什么。你说IE中的导航可以工作?检查从IE发出的请求中的头部信息。 - Edwin de Koning
我尝试在一个 Windows 表单应用程序中运行相同的代码。即使我明确将身份验证标头设置为空并请求页面,我仍然可以在控件中加载页面。而且 Web 应用程序没有配置匿名访问。你能解释一下吗?我开始认为,无论我设置的请求的有效身份验证标头是什么,它都没有响应。 - NLV

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接