session returns null object in asp.net
我正在开发asp.net Web应用程序,其中使用
设置会话变量
aspx页面(myfile.aspx.cs)后面代码中的某处
1 | HttpContext.Current.Session["ProjectID"] = Request.QueryString["Pid"].ToString(); |
检索会话变量
常规业务逻辑C#类(Someclass.cs)
1 | sProjectID = HttpContext.Current.Session["ProjectID"].ToString(); |
它在上面的行给我错误。 在我看来很奇怪。 有人可以解释吗?
编辑:
通过通用处理程序(.ashx)页面调用类
如果确实是您所显示的代码行产生了异常,则意味着您的"常规业务逻辑"正在非HttpRequest处理线程中运行,其中诸如Context和Session之类的东西不可用。检查
更新:
看到您的编辑后-要访问Session,您的处理程序必须在其类声明中包含
在调试模式下,您无法在会话中找到任何值。将其分配给诸如字符串之类的引用变量,并确定其是否返回值。
并为良好作法,在分配给任何对象之前,请检查会话变量是否为null。
尝试通过以下方式设置Cookie:
1 2 3 | 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:
1 | string value = HttpContext.Current.Request.Cookies["Pid"] != null ? this.Page.Request.Cookies["Pid"].ToString() : null; // load it from request |
老实说,您根本不应该尝试从业务逻辑中接收cookie,因为它与您的网站无关。相反,您应该将Cookie加载到UI(网络)中,并将该值作为参数传递给业务逻辑中Someclass.cs的任何函数或属性。
看一下N层模型,这是这样做的原因。
您能否到达设置会话值的调试模式行?如果您可以尝试点击后一行并通过键" ProjectID"检查会话中的值。