[英]Associate class instance to Session in asp.net core
我目前正在 asp.net 核心中的网络服务器上工作。 我希望服务器处理用户输入和数据,并且正在寻找一个好的解决方案来为运行时保存复杂的对象。
所以我的第一个方法是使用 Sessions。 在 Asp.net 中,会话曾经像Session["key"] = new ValueObject()
在 asp.net 内核中,您只能对字节 arrays 使用方法 SetString、SetInt32 和 Set。 我发现了很多基本上将对象转换为 Json 字符串的解决方案。 但是在我的情况下,这是不可能的,因为对象包含其他 object 引用等等。
我的第二个想法是创建一个以 SessionId 作为标识符的对象列表。 问题是每次我向服务器发出请求时,它都需要通过所有现有的会话 go 来找到匹配的会话,所以这可能会大大增加请求的时间。
所以我的问题是保存用户相关对象的最佳方法是什么?
使用 Sessions 甚至是解决这个问题的最佳方法还是我错过了什么?
注意:请求由 JQuery AJAX 处理,因此无法重新加载页面以访问数据。
您可以尝试使用可以容纳任何 .net 类型的MemoryCache
。 这不是问题,但鉴于它是一个共享结构,它将共享给所有用户,因此,您必须仔细管理它。 为此,您可以使用HttpContext.Session.Id
来定义 memory 缓存实例上的keys
。 对于示例(我没有测试的伪代码):
public class HomeController : Controller
{
private IMemoryCache _cache;
public HomeController(IMemoryCache memoryCache)
{
_cache = memoryCache;
}
public async Task<IActionResult> CacheGetOrCreateAsynchronous()
{
string cacheKey = $"{HttpContext.Session.Id}_data";
var cacheEntry = await
_cache.GetOrCreateAsync(cacheKey , entry =>
{
entry.SlidingExpiration = TimeSpan.FromSeconds(3);
return Task.FromResult(DateTime.Now);
});
return View("Cache", cacheEntry);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.