从上下文中获取操作/控制器名称

本文关键字:控制器 操作 上下文 获取 | 更新日期: 2023-09-27 18:24:28

我能在SignalR集线器中获得当前操作/控制器名称吗?就像在使用HttpContext的常见MVC控制器中一样?

目前我正在使用:

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

但这只会返回以下内容:

http://localhost:5226/signalr/connect?transport=webSockets&客户端协议=1.5&connectionToken=&connectionData=。。。名称xhub。。。名称yhub&tid=1

此外,CCD_ 2似乎没有进一步的信息。

有人有主意吗?

从上下文中获取操作/控制器名称

我刚刚发现我可以使用SignalR的Hub管道:

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设置为全局对象,并在以后进行访问。这当然不是最优的。

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

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

希望这能帮助