4

我正在使用 ASHX 处理程序,我希望处理程序检查会话是否!= null。

if (context.Session["Username"] != null)

我得到这个错误指向这一行:

System.NullReferenceException:对象引用未设置为对象的实例。

有什么问题?

4

4 回答 4

11
if (context.Session["Username"] != null)

你的处理程序实现了IRequiresSessionState吗?否则会话可能不可用。

来自MSDN

指定目标 HTTP 处理程序需要对会话状态值进行读写访问。这是一个标记接口,没有方法。

于 2011-04-25T00:47:40.560 回答
4

像这样使用它。封装对象之一可能已经为空:

if (context != null)
  if (context.Session != null)
    if (context.Session["Username"] != null) {
      // Do stuff
}
于 2011-04-25T00:48:45.387 回答
1

是的,我会说首先检查上下文是否不为空。

于 2011-04-25T00:48:32.960 回答
0

我对 .ashx 文件也有类似的问题。解决方案是处理程序必须实现 IReadOnlySessionState(用于只读访问)或 IRequiresSessionState(用于读写访问)。例如:

public class myModule: IHttpHandler, IRequiresSessionState { ... }

这些接口不需要任何额外的代码,而是作为框架的标记。

希望这会有所帮助。

乔纳森

于 2013-04-01T18:25:43.020 回答