在自主托pipe的OWIN Web API中,如何在closures时运行代码?
我使用以下代码片断自主托pipeOWIN 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服务closures时运行一些代码。 我正在寻找像HttpApplication.Application_End ,一个Disposed事件,或一个妥善放置override void Dispose() 。 
如何在Web API服务closures时运行代码?
这可以通过获取主机的取消令牌并像这样注册callback来实现
 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团队中的某个人告诉我,这个密钥是用于主机特定的function的,因此可能不存在于所有的主机上。 Microsoft.Owin.Host.SystemWeb确实实现了这一点,但我不确定其他人。
 validation这是否适用于您的最简单方法是检查app.Properties的host.OnAppDisposing 。 
 我认为有一个更好的方法来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”的取消标记。
请参阅: http : //msdn.microsoft.com/en-us/library/microsoft.owin.builderproperties.appproperties%28v=vs.113%29.aspx