我有一个单页javascript应用程序(使用JavascriptMvc完成)和一个后端,该后端具有在ASP.NET MVC3之上构建的REST服务(使用NServiceMVC完成)。
REST服务已安装并正在运行MiniProfiler,并且每个AJAX请求都会返回X-MiniProfiler-Ids header 。实际上,我确实正在运行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
参数也非常有用,因此会显示清除按钮,因为否则,您将获得恒定的 Action 列表,因为整个页面基本上从不刷新。这是执行此操作的“正确”方法,还是有更好的方法?
最佳答案
在您的代码中假设@ MiniProfiler.RenderIncludes()使用javascript生成了所有内容。尽管当前可能是一个有效的假设,但这种情况可能会改变。
为什么不简单地完全避免黑客攻击并使用ajax请求来加载事件探查器呢?在任何情况下,无论是ajax脚本还是嵌入式脚本,通过回调插入事件探查器的行为都会在某种程度上影响性能分析的结果。
<div id="profiler"></div>
<script type="text/javascript">
$.load("#profiler","api/profiler");
</script>
关于asp.net-mvc-3 - 如何将MiniProfiler与单页Web应用程序/REST后端一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9831090/