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