我正在构建一个简单的性能记录器,它可以连接到Application_EndRequest/Application_BeginRequest
我想将某种 Action 和 Controller 的名称发送给我的记录器,作为某种键。

我怎样才能获得这些信息? (不要介意我是否必须早些拦截它并在上下文中保留它)

最佳答案

不确定是否可以。

我戳了一下HttpContext.Current,发现在第二个(以及随后的请求)上,HttpContext.Current.Items集合包含一个System.Web.Routing.UrlRoutingModule.RequestData类的实例。不幸的是,此类是私有(private)的,因此您无法访问其数据。但是,在调试器中,它似乎包含您要查找的信息(不确定为什么在第一个请求中不存在该信息)。

另外,您是否可以只使用一个 Action 过滤器,并将其添加到所有 Controller 派生自的BaseController类中?就像是:

public class LoggingActionAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        base.OnActionExecuting(filterContext);
        var controllerName = filterContext.Controller.ControllerContext.RouteData.Values["controller"];
        var actionName = filterContext.Controller.ControllerContext.RouteData.Values["action"];
    }
}

然后使用此属性创建基本 Controller 类:
[LoggingAction]
public abstract class BaseController : Controller
{
}

关于c# - 如何在Application_EndRequest中获取RouteData,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4028669/

10-17 00:05