.net核心控制器操作使用HttpContext共享值

时间:2020-07-22 17:27:32

标签: asp.net-core httpcontext

我的应用程序中有两个控制器动作,FirstAction和SecondAction。
调用FirstAction时,我想存储数据并希望在SecondAction中重用。
我尝试了HttpContext,但在SecondAction中无法获取价值。它总是重新运行为null。

 public async Task<IActionResult> FirstAction()
        {
                HttpContext.Items.Add("Key1", myValue1);
                HttpContext.Items.Add("Key2", myValue2);
        }

 public async Task<IActionResult> SecondAction()
        {
               var _value1 =  HttpContext.Items["Key1"]?.ToString();
               var _value2 =  HttpContext.Items["Key2"]?.ToString();
        }  

对于这种scenairo,还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

HttpContext.Items仅存储单个请求的数据。 From the docs关于状态管理:

HttpContext.Items集合用于在处理单个请求时存储数据。处理请求后,该集合的内容将被丢弃。

只要用户的会话处于活动状态,就可以store data in session state将其从一个请求保留到另一个请求。您必须configure session storage first。内存中选项仅对单个服务器有效。数据库或Redis存储适用于在负载平衡方案中使用的服务器场。

文档显示how to set and read session state使用强类型方法,例如:

HttpContext.Session.SetString(SessionKeyName, "The Doctor");
HttpContext.Session.SetInt32(SessionKeyAge, 773);

var name = HttpContext.Session.GetString(SessionKeyName);
var age = HttpContext.Session.GetInt32(SessionKeyAge);