IHttpModule、IHttpHandler访问Session异常解决之道
2010/8/17 1:14:04
阅读全文(5040) | 回复(0) | 编辑 | 精华
Asp.net实际应用中,我们经常会用IHttpModule进行身份认证或权限分配,所以,会读取Session中的用户ID,如:HttpApplication ha = (HttpApplication)sender;if(ha.Context.Session["userid"] == null || (string)ha.Context.Session["userid"] == ""){...} 最近迷上了IHttpHandler,后台程序全部IHttpHandler化。在引入IHttpModule进行身份认证前,文件上传、下载和删除都很正常,加入IHttpModule进行身份认证后,这些功能全部无效了。 错误信息如下: 未将对象引用设置到对象的实例。 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。 源错误: 执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。 堆栈跟踪: [NullReferenceException: 未将对象引用设置到对象的实例。] MyHttpModule.AuthenticModule.context_PreRequestHandlerExecute(Object sender, EventArgs e) +693 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +92 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +64 --------------------------------------------------------------------------------版本信息: Microsoft .NET Framework 版本:2.0.50727.42; ASP.NET 版本:2.0.50727.42 正在郁闷之时,突然想起要在IHttpHandler中访问Session,在实现IHttpHandler的同时,也要实现IRequiresSessionState接口,其命名空间为:System.Web.SessionState。 简单修改ashx如下,便可以解决IHttpModule进行身份认证遇到IHttpHandler访问Session异常错误的问题了。 <%@ WebHandler Language="C#" Class="Handler" %>using System;using System.IO;using System.Web;using System.Web.SessionState; public partial class Handler : IHttpHandler,IRequiresSessionState{ public void ProcessRequest (HttpContext context) {...} public bool IsReusable { get { return false; } }} 笔记一下,免得以后再遇到类似问题时找不着北。 注意:无论ashx中有无Session访问相关代码,因为IHttpModule进行身份认证或权限分配时,读取了Session,故必须在ashx中同时实现IHttpHandler和IRequiresSessionState接口。
Posted by Qr on 2010/8/17 1:14:04
发表评论: |