我正在构建一个简单的性能记录器,它可以连接到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/