如何将MiniProfiler与单页Web应用程序/ REST后端一起使用?

时间:2012-03-22 21:49:45

标签: asp.net-mvc-3 mvc-mini-profiler javascriptmvc

我有一个单页javascript应用程序(使用JavascriptMvc完成)和一个构建在ASP.NET MVC3之上的REST服务的后端(使用NServiceMVC完成)。

REST服务安装并运行了MiniProfiler,每个AJAX请求都会返回X-MiniProfiler-Ids标头。我确实有miniprofiler运行和工作,但我找不到任何关于此的信息,所以我不确定我是否正确地做到了这一点。

这是一个支持的方案,现在有一种特定的方法吗?


我目前正在做的是:

在HTML应用程序中(这是所有静态代码,没有动态内容),我有:

<script type="text/javascript" src="/api/profiler"></script>

在我的MVC应用中,我有:

    public ActionResult Profiler()
    {
        if (!ControllerContext.HttpContext.IsDebuggingEnabled)
        {
            return new EmptyResult();
        }
        return new ContentResult() { 
            Content = StackExchange.Profiling.MiniProfiler.RenderIncludes(
                        position: RenderPosition.Right,
                        showControls: true
                      )
                      .ToString()
                      .Replace("<script type=\"text/javascript\">", "")
                      .Replace("</script>", "") 
        };
    }

显然,这里有一个黑客删除硬编码的<script>标签。

除此之外,从MVC的其他部分来看,profiler与平常使用完全相同。当您在应用程序中执行导致REST调用的操作时,miniprofiler会在角落中显示它。使用showControls:true参数在这里也非常有用,因此显示清除按钮,因为否则您只需获得一个常量的操作列表,因为整个页面基本上不会刷新。

这是“正确”的方法吗,还是有更好的方法?

1 个答案:

答案 0 :(得分:1)

您的代码中假设@ MiniProfiler.RenderIncludes()使用javascript生成所有内容。虽然这在当前时间可能是一个有效的假设,但这可能会改变。

为什么不完全避免黑客攻击并使用ajax请求来加载探查器?在任何一种情况下,无论是ajax还是嵌入式脚本,通过回调插入探查器的行为都会影响分析的结果。

<div id="profiler"></div>
<script type="text/javascript">
  $.load("#profiler","api/profiler");
</script>