是否有为集线器功能定义和添加方法过滤器(如mvc中的ActionFilters) 我的意思是这样的:
public class MyHub : Hub
{
[Log]
public string RegisterUser(UserModel model){
...
}
}
我可以在 LogAttribute 实现中进行控制。
答案 0 :(得分:13)
您应该能够使用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();
}