20

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

REST 服务已安装并运行 MiniProfiler,并且 X-MiniProfiler-Ids 标头随每个 AJAX 请求返回。我确实有 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 的其余部分来看,分析器的使用与往常完全相同。当您在应用程序中执行导致 REST 调用发生的操作时,miniprofiler 会在角落显示它。在这里使用该showControls:true参数也很有帮助,因此清除按钮会显示出来,因为否则您只会得到一个恒定的操作列表,因为整个页面基本上从不刷新。

这是执行此操作的“正确”方法,还是有更好的方法?

4

1 回答 1

1

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

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

<div id="profiler"></div>
<script type="text/javascript">
  $.load("#profiler","api/profiler");
</script>
于 2014-03-04T16:00:18.553 回答