2010-08-30 79 views
1

我正在用C#和.NET写一个软件来管理我的商店,它有一个网站,你可以去选择接收卖家人的访问。这个网站有一个幕后管理者,但我希望软件能够做到这一点,有效地移除浏览器管理员,实现这一目标的第一步是允许软件访问生成所需XML文件的PHP脚本。如何跳过IIS7上某些用户agentes的身份验证?

问题是,使用C#编写并使用web.config的登录机制不允许软件访问位于浏览器管理器的受保护文件夹内的所述脚本。我已经尝试过使用HttpWebRequest对象,WebClient对象与许多操作系统的组合,凭据,流,甚至特殊的用户代理尝试登录,但没有成功,我只能下载登录页面。

下面是我使用的那一刻,下载数据(这是我最新的尝试,使用特殊的报头)的代码:

string agent = "AGENT"; //Not real name, it's just confidential 
WebClient client = new WebClient(); 
client.Headers["HTTP_USER_AGENT"] = agent; 
client.DownloadFileCompleted += new AsyncCompletedEventHandler(DownloadFileCompletedEvtHdl); 
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgressChangedEvtHdl); 
if (!Directory.Exists(toSavePath)) 
{ 
    Directory.CreateDirectory(toSavePath); 
} 
if (File.Exists(toSavePath + filename)) 
{ 
    File.Delete(toSavePath + filename); 
} 
client.DownloadFileAsync(new Uri(url), toSavePath + filename); 

登录页面非常简单,只assings一个click事件登录按钮来检查web.config中的用户和密码是否相同。如果为true,则重定向页面,否则,错误。

那么,最好的方法是什么?有没有什么办法来配置IIS7跳过该特殊用户代理或其他自定义头的身份验证?或者我走错路了?

在此先感谢!

回答

0

你想要做的是写一个HttpModule(或使用global.asax)来挂接到AuthorizeRequest事件。

在这个阶段,你可以验证任何允许用户绕过登录,然后你可以设置

context.SkipAuthorization =真

http://csharpdotnetfreak.blogspot.com/2009/04/aspnet-bypass-forms-authentication.html

+0

试过了,没有工作,这里的代码我使用: <%@应用程序语言= “C#” %> <脚本RUNAT = “服务器”> 保护无效Application_AuthorizeRequest(对象发件人,EventArgs的) { \t string url = Request.ServerVariables [“URL”]; \t如果(this.Request.ServerVariables [ “HTTP_USER_AGENT”] == “药剂”) \t { \t \t this.HttpContext.Current.SkipAuthorization = TRUE; \t} } 任何想法? – Metraton 2010-08-31 19:44:32

+0

我的回答是正确的,你需要做更多的研究,以确保你正确地绑定到事件。我还建议永远不要在页面标记中做C#代码。它应该始终在CS文件中。如果您在global.asax中触发问题,请改为创建一个HttpModule。 – 2010-09-01 13:24:22

+0

管理得到这个工作,谢谢! = D – Metraton 2010-09-01 16:40:22