0

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

3 回答 3

3

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

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

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

于 2013-02-23T00:24:40.807 回答
1

我找到了答案,一切都与继承有关。我的解释可能措辞不太好,因为我仍在学习,但就是这样。

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

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

然后我可以访问会话。

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

感谢大家的帮助。

于 2013-02-25T18:47:01.430 回答
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;
        }
    }
于 2013-02-23T04:57:44.290 回答