Sam*_*ron 6 c# asp.net asp.net-mvc-2
我正在构建一个简单的性能记录器,它挂钩到Application_EndRequest/Application_BeginRequest
我想将我的记录器的动作和控制器的名称作为某种键发送给我.
我如何访问此信息?(不要介意我必须在之前拦截它并在上下文中保留它)
Mik*_*ard 13
我知道这是一个老问题,但您可以使用以下方法访问所请求的信息:
HttpContext.Current.Request.RequestContext.RouteData.Values("controller")
HttpContext.Current.Request.RequestContext.RouteData.Values("action")
Run Code Online (Sandbox Code Playgroud)
不确定你可以。
我浏览了一下HttpContext.Current,发现在第二个(以及后续请求)中,该HttpContext.Current.Items集合包含一个System.Web.Routing.UrlRoutingModule.RequestData类的实例。不幸的是,此类是私有的,因此您无法访问其数据。然而,在调试器中,这似乎包含您正在查找的信息(但不确定为什么它在第一个请求中不存在)。
或者,您是否可以只使用操作过滤器并将其添加到所有控制器派生自的 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"];
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用此属性创建一个基本控制器类:
[LoggingAction]
public abstract class BaseController : Controller
{
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4049 次 |
| 最近记录: |