在Global.asax中,会话状态在此上下文中不可用

时间:2016-02-16 07:00:45

标签: c# asp.net session global-asax application-error

我正在尝试获取Global.aspx中的会话值时收到错误消息:

enter image description here

我尝试了另一种获取Session值的方法,结果相同但消息不同:

enter image description here

在Application_Error方法中发生此错误,并且Session不为null,但它显示它为null。我已将此会话代码放入(HttpContext.Current.Session!= null)条件中,因此它工作正常,但我想要使用此方法无法获得的会话值。

enter image description here

请帮帮我。 感谢

3 个答案:

答案 0 :(得分:3)

Global.asax文件通常用于跟踪应用程序级别事件,并且可以在不同的登录用户之间共享,因此可能无法在global.asax事件中获取会话值。

对于错误记录,您可以使用httpModule

使用httpModule

进行错误记录的链接

http://www.codeproject.com/Articles/16171/An-HTTP-Module-for-ASP-NET-Error-Handling

以下链接用于获取httpModule中的会话值

Can I access session state from an HTTPModule?

答案 1 :(得分:1)

application_error捕获应用程序中的所有异常。您的错误可能源自没有会话的点。

(快速示例:来自异步操作或自定义创建的线程) 最佳测试:在尝试使用session之前测试HttpContext.current!= null和HttpContext.current.session!= null。

无论如何使用会话都很糟糕

哦,最后一点:如果你在应用程序错误中除了“catch”之外还有一个断点,你的错误的thred / async可以在visual studio停止进程之前完成操作。所以在这种情况下你可以有一个会话,而在正常运行(没有断点)你会得到一个异常

答案 2 :(得分:0)

试试这个...

string value = HttpContext.Current.Session["user"] as string;

if (String.IsNullOrEmpty(value))
{
    //your Code here
}