c# - .NET Core 中的 HttpContext 和缓存 >= 1.0

标签 c# .net http caching asp.net-core

我正在尝试将一些库从基于旧 MVC5 System.Web 的堆栈移植到 .Net Core。我遇到的一个问题是缓存的变化。例如,在 MVC5 中我能够读写 i18n 相关数据:

[代码片段 1]

public static Dictionary<string, IEnumerable<CoreDictionaryResource>> DictionaryResourcesCache {
    get { return (Dictionary<string, IEnumerable<CoreDictionaryResource>>)HttpContext.Current.Cache(string.Concat(_Dictionary, DictionaryID, CultureID)); }
    set { HttpContext.Current.Cache(string.Concat(_Dictionary, DictionaryID, CultureID)) = value; }
}

但是,我可靠地获悉 System.Web 及其 HttpContext 不包含 Cache 字段。我可以看到一个 Current 字段,然后是其中的一大堆字段,例如 ApplicationSession 但可惜没有 Cache

我已经在 Startup.cs 中完成了必要的工作,并且应用程序被配置为在内存缓存和 session 中使用。我知道 session 有效,因为我使用

缓存了其他 POCO

[代码片段 2]

 return System.Web.HttpContext.Current.Session.GetObject<User>("AuthenticatedUser");

我创建的扩展中的 GetObject

我是不是在尝试使用 HttpContext 从缓存中读出错误的树,或者我可能需要使用 IDistributedCache ,参见 here, hereSO .

但实际上我只是在 [代码片段 1] 中移植该方法...

您可以在新的 .Net Core 上提供有关缓存的任何指示,这将非常有帮助。

仅供引用,我不希望 Controller 或 View 中有任何逻辑。我正在构建的应用程序使用单独的 DLL 进行数据访问和逻辑,因此请不要将任何带有 DI 的示例发布到 Controller 中。这个问题在它到达 MVC 堆栈之前更多地处于基础架构级别。

谢谢小伙伴们。

最佳答案

内存缓存功能仍然存在,只是稍微移动了一下。如果你添加

"Microsoft.Extensions.Caching.Memory": "1.1.0"

给你 project.json 文件并添加

        services.AddMemoryCache();

对于您的 Startup.ConfigureServices 方法,您将设置一个与旧实例非常相似的单例内存缓存实例。您可以通过依赖注入(inject)获得它,因此带有构造函数的 Controller 可以获得一个实例。

public class HomeController: Controller 
{
    private IMemoryCache _cache;
    public HomeController(IMemoryCache cache) 
    {
        _cache = cache;
    }

}

然后您可以在上面的类中使用 _cache 来获取全局可用的单例类。您可能还需要查看其他类型的缓存,包括用于进程外存储的 Redis 缓存。

关于c# - .NET Core 中的 HttpContext 和缓存 >= 1.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41118506/

相关文章:

c# - DataGridView 项目双击

c# - 泛型类上静态 Create() 方法的紧凑语法?

.net - 你好操作系统与 C# 和单声道?

c# - 使用 Chello 在 Trello 上创建卡片

angularjs - Angular 中的用户名和密码认证

c# - SQL Server 序列间隙

c# - PayPal IPN 集成(快速结账 - Razor/C#)

c# - 如何在 WinForms 中将字典绑定(bind)到组合框?

javascript - WebAPI 提取是否遵循重定向?

javascript - 为什么浏览器限制并行 HTTP 请求