Kestrel shutdown function in Startup.cs in ASP.NET Core
Solution 1:
In ASP.NET Core you can register to the cancellation tokens provided by IApplicationLifetime
public class Startup
{
public void Configure(IApplicationBuilder app, IApplicationLifetime applicationLifetime)
{
applicationLifetime.ApplicationStopping.Register(OnShutdown);
}
private void OnShutdown()
{
// Do your cleanup here
}
}
IApplicationLifetime
is also exposing cancellation tokens for ApplicationStopped
and ApplicationStarted
as well as a StopApplication()
method to stop the application.
For .NET Core 3.0+
From comments @Horkrine
For .NET Core 3.0+ it is recommended to use IHostApplicationLifetime instead, as IApplicationLifetime will be deprecated soon. The rest will still work as written above with the new service
Solution 2:
In addition to the original answer, I had an error while trying to wire the IApplicationLifetime within the constructor.
I solved this by doing:
public class Startup
{
public void Configure(IApplicationBuilder app)
{
var applicationLifetime = app.ApplicationServices.GetRequiredService<IApplicationLifetime>();
applicationLifetime.ApplicationStopping.Register(OnShutdown);
}
private void OnShutdown()
{
// Do your cleanup here
}
}