我使用这些代码段自我托管OWIN Web API:
class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
var config = new HttpConfiguration();
var route = config.Routes.MapHttpRoute("DefaultApi", "{controller}");
appBuilder.UseWebApi(config);
}
}
WebApp.Start<Startup>("http://localhost:8080")
我希望在我的Web API服务关闭时运行一些代码。我正在寻找类似HttpApplication.Application_End
,Disposed
事件或排名靠前override void Dispose()
的内容。
如何在Web API服务关闭时运行代码?
答案 0 :(得分:62)
我认为有更好的方法来获取CancellationToken
:
var properties = new AppProperties(app.Properties);
CancellationToken token = properties.OnAppDisposing;
AppProperties
位于名称空间Microsoft.Owin.BuilderProperties
下,来自此nuget包:http://www.nuget.org/packages/Microsoft.Owin/
属性OnAppDisposing
的描述说:
获取或设置“host.OnAppDisposing”的取消标记。
答案 1 :(得分:54)
这可以通过获取主机的取消令牌并使用它来注册回调来实现
public class Startup
{
public void Configuration(IAppBuilder app)
{
var context = new OwinContext(app.Properties);
var token = context.Get<CancellationToken>("host.OnAppDisposing");
if (token != CancellationToken.None)
{
token.Register(() =>
{
// code to run
});
}
}
}
Katana团队的某个人告诉我,此密钥用于特定于主机的功能,因此可能不存在于所有主机上。 Microsoft.Owin.Host.SystemWeb确实实现了这一点,但我不确定其他人。
验证这是否适合您的最简单方法是检查app.Properties
host.OnAppDisposing
密钥。