C# 检查是否时System.NullReferenceException!=无效的
我正在使用ASHX处理程序,我希望处理程序检查会话是否有效!=空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处理程序 需要对的读写访问权限 会话状态值。这是一个记号笔 接口
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 { ... }