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