我正在使用两个控制器,它们都将值保存到Session
,但只有Controller
中的一个设法保持它的值。
保存值的代码行是
Session["LoginDate"] = <dateTimeObject>;
这两个Controllers
都是一样的。第二个控制器从第一个控制器调用,而在第二个控制器中,如果我设置Session
的值,那么我们就可以了,直到我回到调用控制器。如果我只调用第一个控制器,则可以设置该值并将其发送回客户端。
我尝试修改第二个配置文件以包含
<sessionState mode="InProc" timeout="30" />
并确保它们处于相同版本的.NET,MVC等......
关于如何调试这个的任何想法?我还应该检查什么?
更新
有没有办法从不同的服务器传递会话状态或者更好地使用cookie,因为cookie将在客户端浏览器上?新发现是第二个控制器执行
Redirect("serverOfController_1");
答案 0 :(得分:0)
控制器由MVC核心初始化,因此它具有对当前请求的上下文的正确引用。当你自己创建一个控制器实例时,它根本就没有任何上下文,所以它不能使用来自控制器接口的任何东西。
对于该控制器中的方法在该上下文中工作,它不能依赖于控制器接口中的任何内容。如果要从该方法设置会话变量,则必须获取当前上下文并从中访问Session
对象:
System.Web.HttpContext.Current.Session["LoginDate"] = <dateTimeObject>;
您还可以在创建实例后从当前控制器复制控制器上下文。这样,您创建的控制器将具有与当前控制器相同的上下文。例如:
SecondController second = new SecondController();
second.ControllerContext = ControllerContect;
second.SomeMethod();