Mic*_*lis 2 .net-core asp.net-core
我有一个 .net core (3.1) Web 应用程序,托管在 IIS 上。我无法弄清楚如何在第一个请求之前运行一段代码。我做了以下事情:
我缺少的是在第一个请求到来之前在哪里/如何注册我想要运行的代码/服务?
提前致谢
我缺少的是在第一个请求到来之前在哪里/如何注册我想要运行的代码/服务?
如果您想在应用程序完全启动后调用 mvc 或 web api 之一来预热您的 web 应用程序。您可以尝试使用 IHostApplicationLifetime 的 ApplicationStarted 方法。
该方法将在应用程序启动后立即调用。
您可以将 IHostApplicationLifetime 注入到 Configure() 方法中,然后编写 ApplicationStarted 的回调,该回调将在应用程序主机完全启动时触发。
更多细节,您可以参考下面的例子:
在Startup.cs的ConfigureServices方法中注册httpclient服务
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpClient();
services.AddControllersWithViews();
}
Run Code Online (Sandbox Code Playgroud)
在Configure方法中添加lifetime.ApplicationStarted.Register回调:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime lifetime)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Default}/{action=Index}/{id?}");
});
IHttpClientFactory httpClientFactory = app.ApplicationServices.GetService(typeof(IHttpClientFactory)) as IHttpClientFactory;
lifetime.ApplicationStarted.Register(onApplicationStartedAsync(httpClientFactory).Wait);
}
private async Task<Action> onApplicationStartedAsync(IHttpClientFactory httpClientFactory)
{
var httpclient = httpClientFactory.CreateClient();
var httpMessage = new HttpRequestMessage(HttpMethod.Get, "http://localhost:5000/api/values");
var httpresponse = await httpclient.SendAsync(httpMessage);
if (httpresponse.IsSuccessStatusCode)
{
string res = await httpresponse.Content.ReadAsStringAsync();
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
结果:
归档时间: |
|
查看次数: |
3911 次 |
最近记录: |