我想在应用程序错误事件中读取会话ID,但始终会收到错误“会话状态在此上下文中不可用”。为什么?奇怪的是,我在另一个asp.net应用程序中有相同的代码,一切正常。
void Application_Error(object sender, EventArgs e)
{
var sessionId = Session.SessionID;
//skipped code
}
答案 0 :(得分:32)
会话对象可能不可用,这取决于发生错误的时间。
例如,如果在Begin_Request上发生错误,则会话将无法使用,因为它尚未创建。
总而言之,有时候它会工作,有时根本不会发生错误。
最好在访问会话ID之前检查会话对象的状态,例如
HttpContext context = HttpContext.Current;
if (context != null && context.Session != null) ...
答案 1 :(得分:2)
检查c#中是否缺少任何映射到设计部分中的控件或问题的事件
答案 2 :(得分:1)
Application_error可以在会话不存在的情况下触发,例如垃圾收集器清理时。错误的来源可能不是用户线程。
首先检查会话是否为空。
西蒙
答案 3 :(得分:1)
如果对ASP.NET状态服务器使用进程外状态模式,则可能会收到此错误。您需要使用[Serializable]
属性标记要保存为会话状态的所有类