gpt4 book ai didi

c# - IMemoryCache 不在应用程序启动时保存数据

转载 作者:太空宇宙 更新时间:2023-11-03 19:39:43 25 4
gpt4 key购买 nike

我创建了一个全新的 ASP.NET Core Web API 项目。这是 Startup.cs 中的 ConfigureServices:

    public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddMemoryCache();
var serviceProvider = services.BuildServiceProvider();
var cache = serviceProvider.GetService<IMemoryCache>();

cache.Set("key1", "value1");
//_cahce.Count is 1
}

如您所见,我向 IMemoryCache 添加了一个项目。这是我的 Controller :

[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
private readonly IMemoryCache _cache;
public ValuesController(IMemoryCache cache)
{
_cache = cache;

}
[HttpGet("{key}")]
public ActionResult<string> Get(string key)
{
//_cahce.Count is 0
if(!_cache.TryGetValue(key, out var value))
{
return NotFound($"The value with the {key} is not found");
}

return value + "";
}
}

当我请求 https://localhost:5001/api/values/key1 时,缓存是空的,我收到一个未找到的响应。

最佳答案

简而言之,您在其中设置值的缓存实例与稍后检索的缓存实例不同。您不能在构建 Web 主机时执行类似操作(即在 ConfigureServices/Configure 中)。如果您需要在启动时执行某些操作,则需要在 web 之后执行主机已构建,在 Program.cs 中:

public class Program
{
public static void Main(string[] args)
{
var host = CreateWebHostBuilder(args).Build();

var cache = host.Services.GetRequiredService<IMemoryCache>();
cache.Set("key1", "value1");

host.Run();
}

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
}

关于c# - IMemoryCache 不在应用程序启动时保存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55338211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com