启动/停止OWIN中间件

本文关键字:中间件 OWIN 停止 启动 | 更新日期: 2023-09-27 17:50:35

我想知道是否有可能根据条件/事件启动/停止单个OWIN中间件?

假设我在OWIN上同时托管Web API 2和SignalR,例如提供有关网络设备的信息,并在它们离线/在线时立即通知客户端。在某些场景中,比如"维护"模式,Web API 2不应该可用,但我仍然需要通知客户机某个事件。所以我需要阻止Web API 2从回答请求(例如,"不可用","看到其他",…),但SignalR应该仍然可用。

这可能不重新启动整个web应用程序上下文吗?

启动/停止OWIN中间件

我认为你可以用多种方法解决这个问题。如果所有你需要做的是发送"不可用"在一个特定的时间窗口从ASP。. NET Web API,您可以简单地在asp.net中使用消息处理程序。. NET Web API管道,该管道在此时间窗口期间唤醒并缩短所有请求的执行并发送响应。如果您只想要ASP。. NET Web API的行为是否在停机期间有所不同,这是一个可以查看的选项。

如果你想改变多个框架的行为,你可以考虑在一个地方用一个覆盖的OWIN中间件来做这件事,正如Brock所建议的。

此外,如果您想要更多的控制,您还可以查看MapWhen扩展,它可以用于有条件地将中间件插入到管道中。

app.MapWhen(context =>
{
    // check the condition and return true or false
},
trueApp =>
{
    // Run middleware here like this using trueApp
    // trueApp.Run or trueApp.Use
});

您必须根据您的自定义条件将中间件编码为nop