在我的授权过程中,我需要将一些数据设置到会话中,以便它可以随网页发出的每个请求一起传送。一旦授权在我的AuthorizationAttribute.AuthorizeCore()中得到批准,我就会调用我们的服务来检索需要随每个请求一起传输的必要数据,并通过httpContext.Session["MyInfoObject"] = myInfoObject
将其填充到会话中,然后返回true 。
会话cookie已设置,下一个请求显示用户现在已通过身份验证。但是,当我尝试检索先前通过var myInfoObject = requestContext.HttpContext.Session["MyInfoObject"] as MyInfoObject;
存储的数据时,整个会话值集合为空。我观察到Session对象,我可以看到Session对象已填充,SessionID与浏览器中会话cookie中的SessionID相同,但值集合为空。什么都没有保存。
有什么想法吗?
更新 我正在检查控制器基类中的会话值。我为我的控制器创建了一个自定义基类,在Initialize()重写中,我首先调用base.Initialize()然后开始摆弄Session。在此阶段,会话值为空。但是,如果我在Derived控制器上的Action中放置一个断点,那么我的值就在那里。我想我错过了管道执行方式。任何信息都会有所帮助。
答案 0 :(得分:1)
我能够解决这个问题,并发现了几点。它真正归结为管道的每个阶段的会话对象的状态。它在任何时候都不是NULL
;问题在于我之前填入的所有值都不可用,这取决于我在执行链中的位置。我没有找到任何关于生命周期的官方文档,但我能够发现一些事情:
答案 1 :(得分:0)
我通常通过重写OnActionExecuting方法来访问基本控制器中的Session变量。我认为初始化过程太早。见enter link description here