问题描述
刚学.net时间不长,用ihttphandler做一个访问权限统一管理的东西publicvoidProcessRequest(System.Web.HttpContextcontext){if(System.Web.HttpContext.Current.Session["user"]==null){context.Response.Redirect("~/index.aspx");return;}}用调试看发现这个方法跑完了,而且session里确实有东西,但奇怪的是这个方法跑完调试貌似结束了,然后网页上什么也没有,就像ihttphandler把request请求拦截下来后就hold住了,并没有往真正的request指定响应者继续转发请问各位怎么做才能让ihttphandler把request继续转发下去
解决方案
解决方案二:
sf被抢到啦context.Response.Redirect("~/index.aspx",false);楼主好好看看Redirect里面传的参数再做这个!!要不会很麻烦的哦!!!
解决方案三:
好似不能这么做。HttpHandler拦截所有请求,包括redirect的请求。这样就会产生无限循环情况。可以考虑使用HttpModule拦截部分请求。我就是这么做的。
解决方案四:
二楼:session为空的时候能正常转发到index.aspx,不为空就没法继续了,再加上个redirect的话就跟三楼说的一样死循环。。。三楼:用ihttpmodule另外继承了IRequiresSessionState没办法用application.Context.Session或者System.Web.HttpContext.Current.Session访问session,都提示未将对象引用设置到对象的实例,我的项目用的是ajaxenable的,用ihttpmodule网页上有找不到sys的错误
解决方案五:
ihttphandler会死循环,ihttpmodule又不能访问session。。。哪位大虾有解决办法啊
解决方案六:
还是用Cookie吧:我查了很多中英文资料,好像只能这么做了。因为HttpModule是可以对任何文件访问都有效的。而访问的文件可以不是asp.net文件,这样就没有解析session的机会。如果有本事可以解析这个cookie:HttpContext.Current.Request.Cookies["ASP.NET_SessionId"];
不过即使做出来了我也会反对。最好不要用没有公布的方法。所以我建议还是用cookie。如果有其他方法我也想听听。
解决方案七:
有点不甘心昨天看了篇帖子提到了Server.Execute("xx.aspx")这个命令,想到是不是能够在ihttpmodule里去调用xx.aspx让后让xx.aspx做权限管理,aspx是能够直接访问session的在loginCheck.aspx里<%@PageLanguage="C#"EnableSessionState="True"AutoEventWireup="true"CodeFile="loginCheck.aspx.cs"Inherits="loginCheck"%><%if(Session["user"]==null){Server.Transfer("~/index.aspx");return;}%>页面提示异常详细信息:System.Web.HttpException:只有在配置文件或Page指令中将enableSessionState设置为true时,才能使用会话状态。还请确保在应用程序配置的<configuration><system.web><httpModules>节中包括System.Web.SessionStateMod或自定义会话状态模块。google了一下在httpmodule里添加了session部分,在system.web/pages里添加了enableSessionState部分,问题依旧奇怪的是在webconfig里把这个ihttpmodule的配置注释掉,直接访问loginCheck.aspx能通过,而且有效果。。。。一旦把它作为ihttpmodule就歇菜了。。有没有人碰到过这个问题
解决方案八:
我也遇到了,请问这么楼主你找到解决方案了没?
解决方案九:
我也遇到了..顶上去..希望有高人出来解决一下..
解决方案十:
顶一下也看过httphandler,但是没有做过跳转页给我两分我就4个裤衩
解决方案十一:
有这么复杂吗?是不是我看题看错了?if(context.Session["user"]==null&&context.Request.CurrentExecutionFilePath.ToLower().IndexOf(context.Request.ApplicationPath.ToLower()+"/index.aspx")==-1){context.Response.Redirect("~/index.aspx");}
解决方案十二:
呵呵,我碰到过这个问题,解决办法如下:Web.Config中添加如下:<addverb="*"path="*.aspx"type="myHttpHandler"validate="true"/>publicclassmyHttpHandler:PageHandlerFactory,IRequiresSessionState{publicmyHttpHandler(){////TODO:在此处添加构造函数逻辑//}publicoverrideIHttpHandlerGetHandler(HttpContextcontext,stringrequestType,stringvirtualPath,stringpath){//进行预先处理的代码returnbase.GetHandler(context,requestType,virtualPath,path);}}
解决方案十三:
该回复于2008-05-09 11:19:15被版主删除
解决方案十四:
我也刚好遇到这个问题,查阅了好久的资料终于解决了。首先实现IHttpHandlerFactory和IReadOnlySessionState接口,其中IHttpHandlerFactory的成员方法GetHandler这样实现:publicIHttpHandlerGetHandler(HttpContextcontext,stringrequestType,stringurl,stringpathTranslated){PageHandlerFactoryfactory=(PageHandlerFactory)Activator.CreateInstance(typeof(PageHandlerFactory),true);IHttpHandlerhandler=factory.GetHandler(context,requestType,url,pathTranslated);Pagepage=handlerasPage;page.Init+=newEventHandler(page_Init);returnhandler;}voidpage_Init(objectsender,EventArgse){//直接可以使用HttpContext.Current.Session}
解决方案十五:
我也遇到了同样的问题楼上的好像都没有实质解决啊期待高人