【问题标题】:Calling a controller inside startup.cs of ASP.Net Core在 ASP.Net Core 的 startup.cs 中调用控制器
【发布时间】:2017-11-19 20:24:06
【问题描述】:

如何在 ASP.Net Core API 的 startup.cs 中调用控制器方法?我想在应用程序启动时构建缓存。请帮忙。 提前致谢

【问题讨论】:

    标签: asp.net-core


    【解决方案1】:

    你不能,你不应该。请求需要连接,并且在启动时应用程序尚未完全配置/启动。请求还需要一个 http 上下文的实例(它基本上代表请求),而 Startup 无法做到这一点。

    基本上可以归结为两个选项:

    1. 创建一个 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>
      
    2. 选项是重构您的代码并将需要缓存的内容提取到服务中,然后在应用程序启动期间解决它并运行一次。对于 ASP.NET Core,这应该在 Program.csMain 方法中完成。

      请参阅my answer here,了解如何在应用程序启动期间设置预热。这篇文章是关于应用迁移,但同样的技术也可以用于缓存预热。

      不要像在 ASP.NET Core 1.x 中那样在 Startup.Configure 中运行预热,因为像 dotnet ef ... 这样的工具会在发现 DbContext 时执行它。

    【讨论】:

      【解决方案2】:

      您可以在单独的服务中提取控制器的方法的逻辑,并在启动应用程序的情况下使用它

      【讨论】:

        猜你喜欢
        • 2021-09-19
        • 2016-04-30
        • 2018-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-23
        • 1970-01-01
        相关资源
        最近更新 更多