我有一个 .net core (3.1) Web 应用程序,托管在 IIS 上。我无法弄清楚如何在第一个请求之前运行一段代码。我做了以下事情:
- 设置应用程序池的“启动模式”=“AlwaysRunning”和“空闲超时”= 0
- 在网站上设置“预加载已启用”= true
我缺少的是在第一个请求到来之前在哪里/如何注册我想要运行的代码/服务?
提前致谢
我缺少的是在第一个请求到来之前在哪里/如何注册我想要运行的代码/服务?
如果您想在应用程序完全启动后调用 mvc 或 web api 之一来预热您的 web 应用程序。您可以尝试使用 IHostApplicationLifetime 的 ApplicationStarted 方法。
该方法将在应用程序启动后立即调用。
您可以将 IHostApplicationLifetime 注入到 Configure() 方法中,然后编写 ApplicationStarted 的回调,该回调将在应用程序主机完全启动时触发。
更多细节,您可以参考下面的例子:
在Startup.cs的ConfigureServices方法中注册httpclient服务
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpClient();
services.AddControllersWithViews();
}
在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;
}
Result:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)