【问题标题】:Get Action/Controller name from context从上下文中获取动作/控制器名称
【发布时间】:2016-02-29 16:41:09
【问题描述】:

我能否像在通常的 MVC 控制器中使用 HttpContext 一样在 SignalR 集线器 中获取当前的动作/控制器名称

目前我正在使用:

if (HttpContext.Current != null)
    return HttpContext.Current.Request.RawUrl;

但这只会返回类似:

http://localhost:5226/signalr/connect?transport=webSockets&clientProtocol=1.5&connectionToken=...&connectionData=...name...xhub...name...yhub...&tid=1

另外HubCallerContext 似乎没有更多信息。

有人有想法吗?

【问题讨论】:

    标签: c# asp.net-mvc signalr


    【解决方案1】:

    我刚刚发现我可以使用SignalR's Hub pipeline

    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); 
        }
    }
    

    这样我可以将 Action/Controller 设置为全局对象并稍后访问。这当然不是最优的。

    【讨论】:

      【解决方案2】:

      您可以尝试从RouteData 对象中获取值

             var controller = HttpContext.Request.RequestContext.RouteData.Values["controller"].ToString();
             var action = HttpContext.Request.RequestContext.RouteData.Values["action"].ToString();
      

      希望对你有帮助

      【讨论】:

      • 这对我不起作用,因为 RouteData 在信号器集线器中不包含动作/控制器。
      猜你喜欢
      • 2013-08-17
      • 1970-01-01
      • 1970-01-01
      • 2017-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      • 1970-01-01
      相关资源
      最近更新 更多