gpt4 book ai didi

signalr - 向 hub 方法添加一些过滤器(如 MVC 中的 AcctionFilters)

转载 作者:行者123 更新时间:2023-12-04 10:25:00 25 4
gpt4 key购买 nike

是否有为集线器功能定义和添加方法过滤器(如 ActionFilters 在 mvc 中)
我的意思是这样的:

public class MyHub : Hub 
{

[Log]
public string RegisterUser(UserModel model){
...
}
}

我可以在 中进行一些控制日志属性 执行。

最佳答案

您应该能够通过使用 SignalR's Hub pipeline 来实现与 ASP.NET MVC 中的操作过滤器类似的功能。 :

public class LoggingPipelineModule : HubPipelineModule 
{
protected override bool OnBeforeIncoming(IHubIncomingInvokerContext context)
{
Debug.WriteLine("Invoking '{0}.{1}({2})'.",
context.MethodDescriptor.Hub.Name,
context.MethodDescriptor.Name,
string.Join(", ", context.Args));

return base.OnBeforeIncoming(context);
}

protected override object OnAfterIncoming(object result, IHubIncomingInvokerContext context)
{
Debug.WriteLine("Finished Invoking '{0}.{1}'. Returned '{2}'.",
context.MethodDescriptor.Hub.Name,
context.MethodDescriptor.Name,
result);

return base.OnAfterIncoming(result, context);
}
}

如果您只想记录附加了自定义属性的方法,您可以在记录之前检查您的自定义属性:

protected override bool OnBeforeIncoming(IHubIncomingInvokerContext context) 
{
if (context.MethodDescriptor.Attributes.OfType<MyAttribute>().Any())
{
// Log here.
}

return base.OnBeforeIncoming(context);
}

您可以在调用 MapSignalR 之前注册您的模块。 :

public void Configuration(IAppBuilder app) 
{
GlobalHost.HubPipeline.AddModule(new LoggingPipelineModule());
app.MapSignalR();
}

关于signalr - 向 hub 方法添加一些过滤器(如 MVC 中的 AcctionFilters),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24909004/

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