我一直在尝试伟大的工具,Mvc
MiniProfiler.
我不想用大量的Step命令来抛弃我所有的观点,所以我想在每个动作调用中使用分析器.馊主意?这是我迄今为止所尝试过的
public abstract class BaseController : Controller { protected override void OnActionExecuting(ActionExecutingContext filterContext) { var profiler = MiniProfiler.Current; using (profiler.Step("Action: "+filterContext.ActionDescriptor.ActionName)) { base.OnActionExecuting(filterContext); } } }
但我不认为这是在做我正在打算的事情?我想我需要在OnActionExecuting上启动分析器,并在OnResultExecuted上停止.如何做到这一点,考虑到profiler被设计为与using语句一起使用.
解决方法
您可以定义全局动作过滤器:
public class ProfileActionsAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { var profiler = MiniProfiler.Current; var step = profiler.Step("Action: " + filterContext.ActionDescriptor.ActionName); filterContext.HttpContext.Items["step"] = step; } public override void OnActionExecuted(ActionExecutedContext filterContext) { var step = filterContext.HttpContext.Items["step"] as IDisposable; if (step != null) { step.Dispose(); } } }
并在Global.asax注册:
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); filters.Add(new ProfileActionsAttribute()); }
这几乎都是.