加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 对每个动作调用使用MVC Miniprofiler

发布时间:2020-12-15 23:03:22 所属栏目:asp.Net 来源:网络整理
导读:我一直在尝试伟大的工具,Mvc MiniProfiler. 我不想用大量的Step命令来抛弃我所有的观点,所以我想在每个动作调用中使用分析器.馊主意?这是我迄今为止所尝试过的 public abstract class BaseController : Controller { protected override void OnActionExecu
我一直在尝试伟大的工具,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());
}

这几乎都是.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读