我有一个.net核心(3.1) web应用程序,它是托管在IIS上的。我不知道如何在第一个请求之前运行一段代码。我做了以下工作:
上设置了应用程序池= "AlwaysRunning“和”空闲超时“=0
我所缺少的是在哪里/如何注册我想要在第一个请求出现之前运行的代码/服务?
提前感谢
发布于 2020-07-02 07:27:07
我所缺少的是在哪里/如何注册我想要在第一个请求出现之前运行的代码/服务?
如果您想在应用程序完全启动后调用您的mvc或web之一,则可以为您的web应用程序进行热身。您可以尝试使用IHostApplicationLifetime的ApplicationStarted方法。
此方法将在应用程序立即启动后调用。
您可以将IHostApplicationLifetime注入配置()方法,然后为ApplicationStarted编写回调,当应用程序主机完全启动时将触发回调。
更多细节,您可以参考下面的示例:
在Startup.cs ConfigureServices方法中注册httpclient服务
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpClient();
services.AddControllersWithViews();
}在配置方法中添加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;
}结果:

https://stackoverflow.com/questions/62673836
复制相似问题