c# - 启动/停止 OWIN 中间件?

标签 c# asp.net-web-api signalr owin asp.net-web-api2

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

假设我在 OWIN 上同时托管 Web API 2 和 SignalR,例如提供有关网络设备的信息,并在他们下线/上线时立即通知客户。在某些情况下,比方说“维护”模式,Web API 2 不应该可用,但我仍然需要将某个事件通知客户。所以我需要阻止 Web API 2 响应请求(例如,“不可用”、“查看其他”……),但 SignalR 应该仍然可用。

这是否可以在不重新启动整个 Web 应用上下文的情况下实现?

最佳答案

我认为您可以通过多种方式解决这个问题。如果您需要做的只是在某个时间窗口从 ASP.NET Web API 发送“不可用”,您可以简单地在 ASP.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
});

关于c# - 启动/停止 OWIN 中间件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22441238/

相关文章:

c# - SignalR 客户端 - IHubProxy.On<> 和 Invoke<> 接受接口(interface)

python signalR - 尝试连接时出现500服务器错误

c# - 如何减少更新到 True Transparency WinForm 时的闪烁?还是有更好的方法来做到这一点?

c# - 多表单绑定(bind)数据

asp.net-mvc-4 - 计算请求应该是 GET 还是 POST?

asp.net-mvc - 重载asp.net MVC + Web API应用和异步消息总线的设计注意事项

c# - 从 WebAPI 调用的 Body 中读取 XML 内容在开始时被中断

c# - 从 WebAPI Controller 问题调用 SignalR hub

c# - 一个接口(interface)和一个只有虚拟抽象方法的抽象类是一回事吗?

c# - UWP 应用程序在启动时自动启动