为什么我不能读或写会话?抛出NullObject引用

时间:2013-02-22 23:53:50

标签: c# asp.net session asp.net-web-api

我正在创建一个WebAPI应用程序,并且发现我无法读取或写入会话。我通常如何做和NullObject引用错误,即:

Session["Test"] = "Testing"; var testing = Session["Test"].ToString();

有人会碰巧理解为什么会出现这个例子吗?

using System;
using System.Globalization;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web;
using System.Web.Http;
using System.Web.SessionState;
using System.Web.UI.WebControls;
using DotNetNuke.Entities.Modules;
using DotNetNuke.Entities.Portals;
using DotNetNuke.Services.Exceptions;
using DotNetNuke.Web.Api;

namespace DotNetNuke.Modules.ContactsManager
{

    public partial class ServicesController : DnnApiController
    {
       [AllowAnonymous]
       [HttpGet]
       public HttpResponseMessage createRequest(string amount)
       {
          //code omitted     
          HttpContext.Current.Session["Test"] = "Test";
          //code omitted
          return Request.CreateResponse(HttpStatusCode.OK, result);
       }
    }
 }

3 个答案:

答案 0 :(得分:3)

可能是您没有正确添加会话。

尝试执行HttpContext.Current.Session.Add("Test", "Test");

之类的操作

您的第二个声明var testing = Session["Test"].ToString();将按照您的预期检索数据。

答案 1 :(得分:1)

我找到了答案,这完全取决于遗产。我的解释可能不会措辞得很好,因为我仍然在学习,但现在就是这样。

我正在使用的类已经继承了ApiController类,在我的DotNetNuke项目中,似乎Session之类的内容包含在“{NameSpace} ModuleBase”类中。所以实现IDisposable

    using(myPorjectModuleBase base = new myProjectModuleBase())
{
 var testing = Session["Test"].ToString();
}

然后我可以访问会话。

这可能是针对从6.2及更高版本开始在DotnetNuke平台上进行模块开发的。

感谢大家的帮助。

答案 2 :(得分:0)

您可以使用以下代码,这是C#

中的示例
public static string UserId
    {
        get
        {
            if (HttpContext.Current.Session["UserId"] == null)
            {
                return "";
            }
            return HttpContext.Current.Session["UserId"].ToString();
        }
        set
        {
            HttpContext.Current.Session["UserId"] = value;
        }
    }