运行Asp.Net Core 1.1
大多数时候,无论启动过程中发生什么,我都希望我的ASP.NET核心应用程序能够运行,但是在启动期间有一些关键错误,我希望它能够关闭.在Startup.cs中,我尝试在Configure方法期间将ApplicationLifetime传递给ApplicationStarted事件:
appLifetime.ApplicationStarted.Register((al) => {
var appLtime = (IApplicationLifetime)al;
try {
... various startup code....
} catch (Exception ex) {
appLtime.StopApplication();
}
}, appLifetime);
但这结束了这个错误:
Unhandled Exception: System.ObjectDisposedException: The
CancellationTokenSource has been disposed. at
System.Threading.CancellationTokenSource.ThrowObjectDisposedException()
at
Microsoft.AspNetCore.Hosting.WebHostExtensions.<>c__DisplayClass0_0.b__0()
at System.Action`1.Invoke(T obj)
我猜这是因为我在Start()中调用了Stop(),但我不知道其他任何方式.该应用程序确实关闭所以也许没关系,但如果有人有任何建议我真的很感激.
谢谢,
蜂鸣器
最佳答案 我知道这是一个古老的问题,但由于它还没有回答,我只是经历了同样的过程,我想也许我可以帮助其他人在同一条船上.
我正在使用ASP.NET Core 2.1,但解决方案似乎也适用于1.x.
通过向其添加IApplicationLifetime参数并在最后添加ApplicationStarted委托来修改您的Configure方法,如此…
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApplicationLifetime applicationLifetime)
{
// existing code
applicationLifetime.ApplicationStartup.Register(() => OnStartUp(applicationLifetime));
}
在Startup.cs文件中创建一个OnStartUp方法,就像这样……
public void OnStartUp(IApplicationLifetime applicationLifetime)
{
try
{
// Do your startup magic
}
catch(Exception ex)
{
applicationLifetime.StopApplication();
}
}
如果OnStartUp代码出现问题,它现在将成功关闭应用程序,而不会抛出ObjectDisposedException.