【问题标题】:session returns null object in asp.net会话在 asp.net 中返回空对象
【发布时间】:2014-07-25 11:47:50
【问题描述】:

我正在开发 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) 页面调用类传递

【问题讨论】:

  • 也许你在某处做了一个 Session.Clear() ?
  • 您确定在访问类之前调用​​将变量放入会话吗?

标签: c# asp.net session


【解决方案1】:

如果确实是您显示的代码行产生了异常,则意味着您的“正常业务逻辑”正在非 HttpRequest 处理线程中运行,其中 Context 和 Session 等内容不可用。检查HttpContext.Current 和HttpContext.Current.Session 是否不为空。

更新:

看到您的编辑后 - 要访问 Session,您的处理程序必须在其类声明中包含 IRequiresSessionState。请参阅:HttpContext.Current.Session is null in Ashx file。

【讨论】:

    【解决方案2】:

    您可以在调试模式行中设置会话值吗?如果您可以尝试按“ProjectID”键在会话中打线并检查值。

    【讨论】:

    • 你应该把它作为评论。这不是答案
    • @Shark 我做到了。值进入会话变量
    • 您的业务逻辑是否在单独的程序集中(Visual Studio 解决方案中的项目)。如果它尝试从会话中获取一个值并传递类似的方法参数。另外,请检查 modiX 的答案。
    【解决方案3】:

    在Debug模式的会话中找不到任何值..将其分配给字符串等引用变量并查看它是否返回值..

    为了一个好的做法,在分配给任何对象之前检查会话变量是否为空..

    【讨论】:

      【解决方案4】:

      尝试这样设置 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 层模型,看看这样做的理由。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-18
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-08
        相关资源
        最近更新 更多