2014-07-23 15 views

回答

12

您應該能夠通過使用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(); 
} 
+0

當您使用自己的依賴關係解析器時,以這種方式添加模塊將不起作用。 –