在自主托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.Propertieshost.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