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

gre*_*mac 20 javascriptmvc asp.net-mvc-3 mvc-mini-profiler

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

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

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


我目前正在做的是:

在HTML应用程序(这是所有静态代码,没有动态的东西),我有:

<script type="text/javascript" src="/api/profiler"></script>
Run Code Online (Sandbox Code Playgroud)

在我的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>", "") 
        };
    }
Run Code Online (Sandbox Code Playgroud)

很明显,这里有一个黑客删除硬编码<script>标签.

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

这是"正确"的方式吗,还是有更好的方法?

B2K*_*B2K 1

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

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

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