我正在开发asp.net web应用程序,其中我使用Session
来存储用户相关的数据。虽然我在会话对象中存储数据时我试图检索它但是给出了错误:
Object reference not set to an instance of an object.
设置会话变量
aspx页面(myfile.aspx.cs)背后的代码中的某处
HttpContext.Current.Session["ProjectID"] = Request.QueryString["Pid"].ToString();
检索会话变量
普通商业逻辑C#类(Someclass.cs)
sProjectID = HttpContext.Current.Session["ProjectID"].ToString();
它给我上面的错误。这对我来说很奇怪。任何人都能解释一下吗?
修改
通过通用处理程序(.ashx)页面调用类传递
答案 0 :(得分:2)
如果它确实是您展示的代码行,那么会产生异常,这意味着您的正常业务逻辑"正在非HttpRequest处理线程中运行,其中诸如Context和Session之类的东西不可用。检查HttpContext.Current
和HttpContext.Current.Session
是否为空。
<强>更新强>
看到您的编辑后 - 要访问Session,您的处理程序必须在其类声明中包含IRequiresSessionState
。请参阅:HttpContext.Current.Session is null in Ashx file。
答案 1 :(得分:0)
您可以在设置会话值的调试模式行中到达吗?如果您可以尝试点击线路并通过键&#34; ProjectID&#34;来检查会话中的值。
答案 2 :(得分:0)
尝试以这种方式设置Cookie:
HttpCookie cookie = HttpContext.Current.Request.QueryString["Pid"].ToString();
cookie.Expires = DateTime.Now.AddDays(7); // Set the expiration duration
HttpContext.Current.Response.Cookies.Set(cookie); // Set it to the response
尝试在下一个请求中以这种方式获取cookie:
string value = HttpContext.Current.Request.Cookies["Pid"] != null ? this.Page.Request.Cookies["Pid"].ToString() : null; // load it from request
老实说,您根本不应该尝试在业务逻辑中接收cookie,因为它与您的网站无关。相反,您应该在UI(web)中加载cookie,并将值作为参数传递给业务逻辑中Someclass.cs的任何函数或属性。
看看N层模型及其原因。
答案 3 :(得分:0)
在调试模式下,您无法在会话中找到任何值。将其分配给类似字符串的引用变量,并查找它是否返回值。
并且为了一个好的做法,在分配给任何对象之前检查会话变量是否为空。