.net核心控制器操作使用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();
}  

有没有更好的方法来制作这样的场景?

HttpContext.Items仅存储单个请求的数据。来自状态管理文档:

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

只要用户的会话处于活动状态,您就可以在会话状态下存储数据,以便在一个请求到下一个请求之间保留数据。您必须首先配置会话存储。内存中选项仅对单个服务器有效。数据库或Redis存储适用于服务器场,例如在负载平衡场景中使用。

文档展示了如何使用强类型方法设置和读取会话状态,例如:

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

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

最新更新