我正在创建一个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);
}
}
}
答案 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;
}
}