【问题标题】:HttpRuntime.Cache Equivalent for asp.net 5, MVC 6HttpRuntime.Cache 等效于 asp.net 5、MVC 6
【发布时间】:2016-03-28 15:03:09
【问题描述】:

所以我刚刚从 ASP.Net 4 迁移到 ASP.Net 5。我目前正在尝试更改一个项目,以便它在新的 ASP.Net 中工作,但当然会有大量的错误。

有谁知道 HttpRuntime 的等效扩展是什么,因为我似乎无法在任何地方找到它。我用来缓存对象客户端。

HttpRuntime.Cache[Findqs.QuestionSetName] 

'Findqs' 只是一个通用对象

【问题讨论】:

  • 检查 asp 文档中的in memory cache。对于分布式缓存,文档仍然不完整。您可能会在新 asp 5 caching repo 的示例中找到一些东西
  • 接受的答案显示了另一种方法,但我刚刚发布了一种完全按照您要求的方法。换句话说,可以在 asp.net 核心上使用 HttpRuntime.Cache["key"] 的等价物,我的回答显示了如何做到这一点。

标签: c# caching asp.net-core asp.net-core-mvc asp.net-4.5


【解决方案1】:

您可以使用IMemoryCache 实现来缓存数据。这有不同的实现,包括内存缓存、redis、sql 服务器缓存等。

快速简单的实现是这样的

更新您的project.json 文件并在dependencies 部分下添加以下两项。

"Microsoft.Extensions.Caching.Abstractions": "1.0.0-rc1-final",
"Microsoft.Extensions.Caching.Memory": "1.0.0-rc1-final"

保存此文件将执行 dnu 恢复,所需的程序集将添加到您的项目中。

进入 Startup.cs 类,通过在 ConfigureServices 方法中调用 services.AddCaching() 扩展方法来启用缓存。

public void ConfigureServices(IServiceCollection services)
{
    services.AddCaching();
    services.AddMvc();
}

现在您可以通过构造函数注入将IMemoryCache 注入您的 lass。该框架将为您解析一个具体的实现并将其注入您的类构造函数。

public class HomeController : Controller
{
    IMemoryCache memoryCache;
    public HomeController(IMemoryCache memoryCache)
    {
        this.memoryCache = memoryCache;
    }
    public IActionResult Index()
    {   
        var existingBadUsers = new List<int>();
        var cacheKey = "BadUsers";
        List<int> badUserIds = new List<int> { 5, 7, 8, 34 };
        if(memoryCache.TryGetValue(cacheKey, out existingBadUsers))
        {
            var cachedUserIds = existingBadUsers;
        }
        else
        {
            memoryCache.Set(cacheKey, badUserIds);
        }
        return View();
    }
} 

理想情况下,您不想在控制器中混合缓存。您可以将其移动到另一个类/层以保持所有内容的可读性和可维护性。你仍然可以在那里进行构造函数注入。

官方asp.net mvcrepo有更多示例供大家参考。

【讨论】:

  • 这太棒了!谢谢
【解决方案2】:

我的回答集中在“有谁知道 HttpRuntime 的等效扩展是什么,因为我似乎在任何地方都找不到它”


您标记了两个不同的框架(.net 和 .net 核心),对于它们来说,有两个完全不同的缓存实现/解决方案。下面的第一个就是你要找的那个:

1 - System.Runtime.Caching/MemoryCache
2 - Microsoft.Extensions.Caching.Memory/IMemoryCache


System.Runtime.Caching/MemoryCache:
这与过去的 ASP.Net MVC 的HttpRuntime.Cache 几乎相同。 您可以在 ASP.Net CORE 上使用它而无需任何依赖注入。使用方法如下:

// First install 'System.Runtime.Caching' (NuGet package)

// Add a using
using System.Runtime.Caching;

// To get a value
var myString = MemoryCache.Default["itemCacheKey"];

// To store a value
MemoryCache.Default["itemCacheKey"] = myString;

Microsoft.Extensions.Caching.Memory
这与依赖注入紧密耦合,是在 ASP.Net CORE 上推荐的方法。这是实现它的一种方法:

// In asp.net core's Startup add this:
public void ConfigureServices(IServiceCollection services)
{
    services.AddMemoryCache();
}

在控制器上使用它:

// Add a using
using Microsoft.Extensions.Caching.Memory;

// In your controller's constructor, you add the dependency on the 'IMemoryCache'
public class HomeController : Controller
{
    private IMemoryCache _cache;
    public HomeController(IMemoryCache memoryCache)
    {
        _cache = memoryCache;
    }

    public void Test()
    {
        // To get a value
        string myString = null;
        if (_cache.TryGetValue("itemCacheKey", out myString))
        { /*  key/value found  -  myString has the key cache's value*/  }


        // To store a value
        _cache.Set("itemCacheKey", myString);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多