【问题标题】:Session Value is NULL after saving it using SQL Server Session State会话值在使用 SQL Server 会话状态保存后为 NULL
【发布时间】:2021-04-09 17:34:52
【问题描述】:

我最近将我的应用程序转换为使用会话状态“SQL Sever”而不是“InProc”,因为我必须重定向到第三方应用程序。一切正常,我可以轻松设置和检索会话值。当我尝试从不同的 Controller 方法再次访问 Session 时出现问题

这是它的结构:

添加公司方法

public String AddNewCompany()
    {
       SalesInvoiceSettingController invoiceSetting = new SalesInvoiceSettingController();
       string Uname = Session["UserName"].ToString(); // This session value is picked correctly
     
     invoiceSetting.SaveInvoiceSettings(); // This is another method which I am calling inside this method, by creating an object of 'SalesInvoiceSettingController'

SaveInvoiceSettings 方法

 public string SaveInvoiceSettings()
    {
        
        string Uname = Session["UserName"].ToString(); <-- This is where I get a NULL POINTER EXCEPTION i.e Object Reference not set to an instance of an object.

不确定我在这里做错了什么?它可以从一个控制器的方法访问,但不能从另一个控制器的方法访问。谁能帮我解决这个问题?

【问题讨论】:

  • 您要在另一个控制器中创建一个控制器实例?为什么?更好的设计是让他们共享一个业务层对象。我不确定这是否是原因,但是你更新一个控制器会在生命周期中做不同的事情,而不是框架做的事情?
  • 我可以理解这里的设计缺陷。我无法理解的是,为什么会出现这个问题?会不会是实例导致了问题?
  • 可能。我不确定您是如何实例化控制器的,但是会话状态可能由框架处理并在创建控制器时的某个时候注入,但不是在您这样做时注入,因为您没有传递上下文它来自哪里。
  • 啊,这看起来很有趣。 stackoverflow.com/questions/889516/… 或许你可以设置 httpcontext 并通过这种方式传递会话
  • @Nikki9696... 你是救生员。这帮助很大。我也在下面发布了答案。 :)

标签: c# sql-server session-state


【解决方案1】:

好的,我终于找到了发生这种情况的原因。基本上根据框架,当您创建一个实例时,它并没有真正完全初始化它(即没有会话、请求等)被初始化,但实际上是在流程生命周期的后期“注入”。为了解决这个问题,我们需要手动初始化它。解决方法如下:

考虑两个控制器:

  • 控制器 A(创建“控制器 B”实例的控制器)。
  • 控制器 B

首先你需要在控制器 B 中创建一个初始化方法,如下所示:

控制器 B

  Public class ControllerB : Controller
{
    public void InitializeController(RequestContext requestContext)
    {
        base.Initialize(requestContext);
       
    }
   }

现在,在控制器 A 中创建控制器 B 的实例并调用此方法:

控制器 A

Public Class ControllerA : Controller
 {
   ControllerB obj1 = new ControllerB();
   obj1.InitializeController.InitializeController(this.Request.RequestContext);
  }

你可以走了。您将拥有所有会话的完全访问权限。 感谢 nikki9696 为我指明了正确的方向。

【讨论】:

    猜你喜欢
    • 2019-10-28
    • 1970-01-01
    • 2012-04-08
    • 2018-12-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    相关资源
    最近更新 更多