![](/img/trans.png)
[英]How to configure ApplicationInsightsTelemetry, in .NET Core Web Api
[英].Net core web api configure services before Startup is called
我正在創建 .net core 3.1 web api 應用程序。 默認情況下,它被配置為使用帶有Startup
文件的IHostBuilder
進行一些配置
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
我想在我的Startup
文件中添加一些配置(事件生成),問題是它們不會在應用程序啟動時執行,而只會在 api 收到第一個請求時執行。 這意味着我的托管應用程序在收到請求之前將無法處理事件。 所以問題是:如何在應用程序啟動時從Startup
文件調用配置方法,或者如何進行將在應用程序啟動時執行的特定配置?
使用您的Program.Main
入口點。
修改這個自動生成的代碼:
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
到:
public static void Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
// Use DI via host.Services:
var myConfiguredService = host.Services.GetRequiredService<SomeService>();
myConfiguredService.DoSomething();
host.Run();
}
這是在 EF 2.0 中使用數據初始化 DB 的首選方法,並且仍然適用於其他目的。
這個 ( Main
) 方法在dotnet run
被執行時dotnet run
,在它收到任何請求之前。
但是,如果您在 IIS 后面托管 webapp,請注意 IIS 在收到第一個請求之前不會實際啟動您的應用程序! 所以,你不能在你的應用程序“內部”解決這個問題,我不知道新的/最新的 IIS 是否有任何關於這個的設置。
相反,您可以使用任何正常運行時間監控服務並將其設置為每 1-3-5 分鍾檢查一次您的網絡應用程序,因此您的網絡應用程序將收到一些“虛假”請求並在實際“業務”請求到達之前啟動。
PS 如果您需要 async/await - 將void Main
更改為async Task Main
並將host.Run()
更改為await host.RunAsync()
(在此處討論)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.