我目前正在asp.net核心中的Web服务器上工作。 我希望服务器处理用户的输入和数据,并正在寻找一种很好的解决方案来为运行时保存复杂的对象。
所以我的第一种方法是使用Sessions。在Asp.net中,会话曾经像Session["key"] = new ValueObject()
但是,在asp.net核心中,只能将SetString,SetInt32和Set方法用于字节数组。我发现了很多解决方案,它们基本上将对象转换为Json字符串。但是,在我的情况下,由于对象包含其他对象引用和更多对象,因此这是不可能的。
我的第二个想法是创建一个以SessionId作为标识符的对象列表。问题在于,每次我向服务器发出请求时,它都需要遍历所有现有会话以找到匹配的会话,因此这可能会大大增加请求时间。
所以我的问题是保存与用户相关的对象的最佳方法是什么?
使用Session甚至是解决此问题的最佳方法还是我错过了什么?
注意:请求由JQuery AJAX处理,因此不能重新加载页面以访问数据。
答案 0 :(得分:1)
您可以尝试使用可以容纳任何.net类型的MemoryCache
。这不是问题,但是由于它是一个共享的结构,它将被所有用户共享,因此,您必须仔细管理它。为此,您可以使用HttpContext.Session.Id
在内存缓存实例上定义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);
}
}