Asp.net 访问IHttpModule中的会话并能够执行response.redirect
按照在中找到的解决方案,我能够从IHttpModule访问会话状态。我用它来控制对一些文件的访问,所以如果有人没有访问权限,我想将他们重定向到登录页面。当我尝试执行HttpContext.Current.Response.Redirect(页面)时;它会锁定web服务器。所以我的post-acquire请求状态函数如下所示Asp.net 访问IHttpModule中的会话并能够执行response.redirect,asp.net,ihttpmodule,Asp.net,Ihttpmodule,按照在中找到的解决方案,我能够从IHttpModule访问会话状态。我用它来控制对一些文件的访问,所以如果有人没有访问权限,我想将他们重定向到登录页面。当我尝试执行HttpContext.Current.Response.Redirect(页面)时;它会锁定web服务器。所以我的post-acquire请求状态函数如下所示 void Application_PostAcquireRequestState(object source, EventArgs e) {
void Application_PostAcquireRequestState(object source, EventArgs e)
{
HttpApplication app = (HttpApplication)source;
MyHttpHandler resourceHttpHandler = HttpContext.Current.Handler as MyHttpHandler;
if (resourceHttpHandler != null)
{
// set the original handler back
HttpContext.Current.Handler = resourceHttpHandler.OriginalHandler;
}
HttpContext context = HttpContext.Current;
string filePath = context.Request.FilePath;
context.Trace.Write("HttpDownloadModule", "File path: " + filePath);
Boolean hasAccess = true;
if (filePath.Contains("content/downloads"))
{
//check to make sure a session has been established already....
if (context.Session == null)
hasAccess = false;
SecurityBLL security = new SecurityBLL();
string fileName = filePath.Split('/').Last();
//check to see if a user is logged in
if (!CitrixAccess.loggedin)
hasAccess = false;
//check access for download
if (!security.checkSecurityByDownload(fileName))
hasAccess = false;
if (!hasAccess)
{
HttpContext.Current.Handler = resourceHttpHandler.OriginalHandler;
HttpContext.Current.Response.Redirect("../../login.aspx");
}
}
}
有什么想法吗?谢谢你的帮助 好的,所以我找到了一个解决办法。。。我将hasAccess变量移动为全局变量,并添加了一个EndRequest处理程序。所以我在EndRequest中检查hasAccess并从那里进行重定向 我的答案包括,但我没有足够的声誉对他的答案发表评论哈哈。他的回答帮了我很大的忙,让我知道我该去哪里,但对我来说还不完全 将Response.Redirect调用放入EndRequest处理程序会导致无限循环。我认为这是因为Response.Redirect导致调用EndRequest。所以EndRequest一直被反复调用 为了解决这个问题,我添加了一个私有布尔值来指示我是否已经调用了重定向。如果我已经调用了重定向,那么我不会再调用Response.redirect。这就是我的EndRequest方法的样子:
Private Sub Application_EndRequest(ByVal source As Object, ByVal e As EventArgs)
If Not _blnHasAccess AndAlso Not _blnRedirected Then
_blnRedirected = True
HttpContext.Current.Response.Redirect("~/Error.aspx")
End If
End Sub