从上下文中获取 Action/Controller 名称

Get Action/Controller name from context

我可以在 SignalR hub 中获取当前 Action/Controller 名称 就像在通常的 MVC 控制器中使用 [=12 一样吗? =]?

目前我正在使用:

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

但这只是 returns 类似于:

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

另外 HubCallerContext 似乎没有进一步的信息。

有人知道吗?

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

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

希望对您有所帮助

我刚刚发现我可以使用 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 设置为全局对象并稍后访问。这当然不是最优的。