asp.net mvc 3 - ¿Cómo uso MiniProfiler con una aplicación web de una sola página/backend REST?
asp.net-mvc-3 mvc-mini-profiler (1)
Tengo una aplicación javascript de una sola página (realizada con JavascriptMvc) y un backend con servicios REST creados sobre ASP.NET MVC3 (hecho con NServiceMVC).
Los servicios REST tienen MiniProfiler instalado y en ejecución, y los encabezados X-MiniProfiler-Ids regresan con cada solicitud de AJAX. De hecho, tengo el miniprofiler funcionando y funcionando, pero no pude encontrar ninguna información al respecto, por lo que no estoy seguro de si lo estoy haciendo de la manera correcta.
¿Es este un escenario compatible, y hay una manera específica de hacerlo ahora?
Lo que estoy haciendo actualmente es esto:
En la aplicación HTML (que es todo código estático, no dinámico), tengo:
<script type="text/javascript" src="/api/profiler"></script>
En mi aplicación MVC, tengo:
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>", "")
};
}
Claramente, hay un truco aquí para eliminar las etiquetas <script>
codificadas.
Aparte de esto, del resto del lado MVC de las cosas, el generador de perfiles se utiliza exactamente de la misma manera que de costumbre. Cuando realiza una acción en la aplicación que hace que ocurra una llamada REST, el miniprofiler lo muestra en la esquina. El uso del parámetro showControls:true
es muy útil en este caso, por lo que aparece el botón de borrar, porque de lo contrario solo obtendrás una lista constante de acciones, ya que la página entera casi nunca se actualiza.
¿Es esta la forma "correcta" de hacer esto o hay una mejor manera?
Existe una suposición en su código que @ MiniProfiler.RenderIncludes () genera todo su contenido usando javascript. Si bien eso puede ser un supuesto válido en el momento actual, esto podría cambiar.
¿Por qué no simplemente evitar los hacks por completo y usar una solicitud ajax para cargar el generador de perfiles? En cualquiera de los escenarios, ya sea ajax o script incrustado, el hecho de insertar el generador de perfiles a través de una devolución de llamada afectará un poco el resultado del perfilado.
<div id="profiler"></div>
<script type="text/javascript">
$.load("#profiler","api/profiler");
</script>