通常我们都会把当前操作系统的人员用session记录下来。方便我们记录对当前数据操作有记录处理凭证。
在一般处理程序(ashx)中,遇到如下操作session的异常:
“System.NullReferenceException”类型的异常在 App_Web_vea5kecg.dll 中发生,但未在用户代码中进行处理
其他信息: 未将对象引用设置到对象的实例。
异常代码如下红色字体部分:
var result = ""; int userid = 0; if (HttpContext.Current.Session["User"] == null) { result ="no"; } else { User user = HttpContext.Current.Session["User"] as User; userid = user.Id; }
从异常的提示中我们可以看到引发的是空引用的异常。
解决方法需要做二件事:
第一、引入命名空间:using System.Web.SessionState;
第二、继承接口:IReadOnlySessionState,示例如下:
public class M_DeliveryList : IHttpHandler ,IReadOnlySessionState {
//do something }
通过以上二步设置我们即可对session继续判断操作。为了弄个究竟我们习惯对其源头一探究竟F12.
通过对IReadOnlySessionState这个接口按F12我们可以看到如下代码:
#region 程序集 System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a // C:Program Files (x86)Reference AssembliesMicrosoftFramework.NETFrameworkv4.0System.Web.dll #endregion namespace System.Web.SessionState { // // 摘要: // 指定目标 HTTP 处理程序只需要具有对会话状态值的读访问权限。这是一个标记接口,没有任何方法。 public interface IReadOnlySessionState : IRequiresSessionState { } }
在备注中我们可以看到引用的相关组件及其存放当前系统的路径,以及此接口的作用解析。我们发现其还继承了个接口IRequiresSessionState,于是继续F12得到如下代码:
#region 程序集 System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a // C:Program Files (x86)Reference AssembliesMicrosoftFramework.NETFrameworkv4.0System.Web.dll #endregion namespace System.Web.SessionState { // // 摘要: // 指定目标 HTTP 处理程序需要对会话状态值具有读写访问权。这是一个标记接口,没有任何方法。 public interface IRequiresSessionState { } }
通过注释我们可以看到2个接口都没有没有方法,其主要是通过Http处理程序标记对会话状态值具有读写访问权限,从而就不难理解异常发生的原因了。The end.