向会话添加值时出现NullReferenceException

时间:2013-01-21 18:27:20

标签: c# asp.net

我需要在会话中存储一组字符串,并且我有一个我通过jQuery ajax调用调用的web方法:

[WebMethod]
public string AddIdToSession(string userId)
{
    List<string> userIds = new List<string>();

    if (HttpContext.Current.Session != null && 
        HttpContext.Current.Session["userIds"] != null)
    {
        userIds = (List<string>)Session["userIds"];
        userIds.Add(userId);
        HttpContext.Current.Session["userIds"] = userIds;
    }
    else
    {
        userIds.Add(userId);
        HttpContext.Current.Session.Add("userIds", userIds);  // error here
    }

    return userId;
}

我尝试将ID添加到会话时收到错误:

  

对象引用未设置为对象的实例。

我这样做错了吗?

3 个答案:

答案 0 :(得分:5)

您需要使用EnableSession属性显式启用会话访问:

[WebMethod(EnableSession = true)]

请注意else逻辑将在案例HttpContext.Current.Session == null中触发,这可能是NullReferenceException的原因。

答案 1 :(得分:0)

您需要将[WebMethod]更改为[WebMethod(EnableSession = true)]才能访问当前会话。

然后您可以像这样访问当前会话:

HttpContext.Current.Session

答案 2 :(得分:0)

您需要为Web方法启用会话,将属性更改为

[WebMethod(EnableSession = true)]