【发布时间】:2017-11-19 20:24:06
【问题描述】:
如何在 ASP.Net Core API 的 startup.cs 中调用控制器方法?我想在应用程序启动时构建缓存。请帮忙。 提前致谢
【问题讨论】:
标签: asp.net-core
如何在 ASP.Net Core API 的 startup.cs 中调用控制器方法?我想在应用程序启动时构建缓存。请帮忙。 提前致谢
【问题讨论】:
标签: asp.net-core
你不能,你不应该。请求需要连接,并且在启动时应用程序尚未完全配置/启动。请求还需要一个 http 上下文的实例(它基本上代表请求),而 Startup 无法做到这一点。
基本上可以归结为两个选项:
创建一个 powershell/batch/bash 脚本,在部署或启动应用程序时调用端点。
如果您使用 IIS 或 Azure App Service 来托管您的应用程序,您可以使用web.config 中的Custom Warm-up 设置。
<applicationInitialization>
<add initializationPage="/" hostName="[app hostname]" />
<add initializationPage="/Home/About" hostname="[app hostname]" />
</applicationInitialization>
选项是重构您的代码并将需要缓存的内容提取到服务中,然后在应用程序启动期间解决它并运行一次。对于 ASP.NET Core,这应该在 Program.cs 的 Main 方法中完成。
请参阅my answer here,了解如何在应用程序启动期间设置预热。这篇文章是关于应用迁移,但同样的技术也可以用于缓存预热。
不要像在 ASP.NET Core 1.x 中那样在 Startup.Configure 中运行预热,因为像 dotnet ef ... 这样的工具会在发现 DbContext 时执行它。
【讨论】:
您可以在单独的服务中提取控制器的方法的逻辑,并在启动应用程序的情况下使用它
【讨论】: