gpt4 book ai didi

c# - 使用 SignalR 注入(inject) IPrincipal

转载 作者:太空狗 更新时间:2023-10-29 23:38:32 27 4
gpt4 key购买 nike

我正在尝试将 IPrincipal 注入(inject)到我的 SignalR 集线器构造函数中。我已经看到并尝试了“Selective IPrincipal Injection via StructureMap with SignalR”中的解决方案,但不幸的是,它似乎不再适用于 SignalR 2.x。

在我的调试过程中,我发现有时,我的集线器构造函数是通过堆栈中的 OWIN 中间件调用的。在这种情况下,Thread.CurrentPrincipal 是正确的值。此外(令人惊讶的是)HttpContext.Current 也是非空的。我的印象是这在 SignalR 中始终为 null,我并没有尝试使用它,但我只是在观察。这些有效的调用似乎来自调用堆栈中的管道。

其他时候,调用似乎来自线程池。在这些情况下,Thread.CurrentPrincipal 是一个 GenericPrincipalHttpContext.Current 是 null(再次只是观察),我似乎无法理解校长静态。但是,在中心内,this.Context.User 属性确实具有正确的主体。

我还能如何静态获取主体,以便将其注入(inject)到集线器构造函数中?

最佳答案

预计 HttpContext.CurrentThread.CurrentPrincipal 有时会在 SignalR Hub 激活时设置,但并非总是如此。这是因为激活线程通常与 ASP.NET 的 SynchronizationContext 一起运行。在某些情况下情况并非如此,例如当激活集线器以处理 WebSocket 消息或不干净的 OnDisconnected 事件时。长话短说,有时这些静态因素恰好存在,但您不能依赖它。

我不知道有什么方法可以可靠地静态获取 IPrincipal。在 Hub 中使用 Context.User 有什么问题?

关于c# - 使用 SignalR 注入(inject) IPrincipal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27484467/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com