C#无法检查Session是否存在?

当我执行以下操作时出现错误:

if(Session["value"] != null) { // code } 

我得到的错误是这样的:

你调用的对象是空的。

为什么是这样? 我总是这样检查我的会话? 我正在使用MVC框架,这与它有关吗?

编辑:

代码位于Controller的构造函数中:

 public class MyController : ControllerBase { private int mVar; public MyController() { if (Session["value"] != null) { mVar= (int)Session["value"]; } } } 

会话仅在处理动作期间存在 – 我不希望它在控制器的构造函数中有效。 例如,控制器可能(据我所知)在请求之间重用。

您需要在动作(方法)中执行此操作,或者(可能更恰当地)在动作filter或OnActionExecuting (etc)方法中执行此操作:

 public abstract class ControllerBase : Controller { protected override void OnActionExecuting( ActionExecutingContext filterContext) { // code involving this.Session // edited to simplify base.OnActionExecuting(filterContext); // re-added in edit } } 

[]是一个索引器,它就像一个类的方法。

在这种情况下,Session为null,您无法对其执行索引。

做这个:

 if(Session != null && Session["value"] != null) { // code } 

你必须这样做 –

 if(null != HttpContext.Current.Session["Value"]) { //Code here. } 

您收到此错误,因为“Session”对象为null。 因此,不可能看到它的[“值”]位。 我不熟悉MVC,但要么没有创建Session对象,要么是在生命周期的错误点访问它,或者你只是需要一个测试来检查Session!=空值。

您使用的语法:

 if (Session["mySessionVariable"] != null) { } 

…是在ASP.NET中检查Session对象的正确方法。 我怀疑问题是因为您使用的是ASP.NET MVC。

也许我们的一些MVC专家可以启发我们在ASP.NET MVC中执行此操作的正确方法。

编辑:我看到Marc Gravell在我输入时发布了他的答案。 这应该是有启发性的。

我通过这种方式解决:

 if (Session.Count > 0 && Session["mySessionVariable"].ToString() != null) { } 
 if(Session != null && Session["name"] != null && Session["name"].ToString()!="") { //fire code } 

你也可以使用:

 if (Session == null || String.IsNullOrEmpty((string)Session["session_object"])){ // Do something }