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

本文关键字:抛出 NullObject 引用 会话 不能读 为什么 | 更新日期: 2023-09-27 18:00:33

我正在制作一个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);
       }
    }
 }

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

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

试着做一些类似HttpContext.Current.Session.Add("Test", "Test"); 的事情

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

我找到了答案,这都是关于继承的。我的解释可能措辞不太好,因为我仍在学习,但它在这里。

我正在处理的类已经继承了一个ApiController类,在我的DotNetNuke项目中,Session之类的东西似乎包含在{NameSpace}ModuleBase"类。所以实现一个IDisposable

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

然后我可以访问会话。

这可能是专门针对DotnetNuke平台6.2及更高版本的模块开发的。

感谢大家的帮助。

您可以使用以下代码,这是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;
        }
    }