Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查是否时System.NullReferenceException!=无效的_C#_Null_Handler_Ashx_Argumentnullexception - Fatal编程技术网

C# 检查是否时System.NullReferenceException!=无效的

C# 检查是否时System.NullReferenceException!=无效的,c#,null,handler,ashx,argumentnullexception,C#,Null,Handler,Ashx,Argumentnullexception,我正在使用ASHX处理程序,我希望处理程序检查会话是否有效!=空 if (context.Session["Username"] != null) 我得到一个错误,指向这条线: System.NullReferenceException:对象引用未设置为对象的实例 有什么问题吗 if (context.Session["Username"] != null) 你的处理器实现了什么?否则,会话可能不可用 发件人: 指定目标HTTP处理程序 需要对的读写访问权限 会话状态值。这是一个记号笔 接口

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

if (context.Session["Username"] != null)
我得到一个错误,指向这条线:

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

有什么问题吗

if (context.Session["Username"] != null)
你的处理器实现了什么?否则,会话可能不可用

发件人:

指定目标HTTP处理程序 需要对的读写访问权限 会话状态值。这是一个记号笔 接口,并且没有方法


是的,我想先检查一下上下文是否为空。

像这样使用它。其中一个封装对象可能已为空:

if (context != null)
  if (context.Session != null)
    if (context.Session["Username"] != null) {
      // Do stuff
}

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

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

希望这有帮助


乔纳森

噢,我真蠢,我应该加上
IReadOnlySessionState
。。。我发现了这个链接:像上面那样堆叠空检查总是比较安全的,这样您就可以精确地找出问题的确切根源。这似乎是一件苦差事,但会有回报。如果会话不可用时存在备用代码路径,则此方法是合理的-另一方面,如果很难假设会话会在那里,并且您的代码依赖于此假设,则快速失败的方法就是让它抛出异常,否则,您很可能会用空检查来掩盖这个问题。当然,嵌套的if语句应该用嵌套的else语句来补充,这样就适合处理空对象(首先不应该是空的)并用适当的消息抛出适当的异常。
public class myModule: IHttpHandler, IRequiresSessionState { ... }