2012-03-22 9 views
20

Ho un'applicazione javascript a una sola pagina (eseguita con JavascriptMvc) e un back-end con servizi REST costruiti su ASP.NET MVC3 (fatto con NServiceMVC).Come utilizzare MiniProfiler con un'applicazione Web singola/backend REST?

I servizi REST hanno MiniProfiler installato e in esecuzione e le intestazioni X-MiniProfiler-Ids vengono restituite con ogni richiesta AJAX. In realtà ho il miniprofiler funzionante e funzionante, ma non ho trovato alcuna informazione su questo, e quindi non sono sicuro se lo sto facendo nel modo giusto.

Si tratta di uno scenario supportato, e c'è un modo specifico per farlo ora?


Quello che sto facendo attualmente è questa:

Nell'applicazione HTML (che è tutto il codice statico, non roba dinamica), ho:

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

Nel mio MVC app, ho:

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>", "") 
     }; 
    } 

Chiaramente, c'è un hack qui per mettere a nudo le hardcoded <script> tag.

Oltre a ciò, dal resto del lato MVC, il profiler viene utilizzato esattamente come al solito. Quando esegui un'azione nell'app che provoca una chiamata REST, miniprofiler lo mostra nell'angolo. L'uso del parametro showControls:true è piuttosto utile anche qui, quindi viene visualizzato il pulsante di cancellazione, perché altrimenti si ottiene semplicemente un elenco costante di azioni poiché l'intera pagina non si aggiorna essenzialmente.

È questo il modo "corretto" per farlo oppure esiste un modo migliore?

+0

Giusto per essere chiari: la soluzione funziona, ma vuoi confermare che hai seguito le best practice? –

+0

@KirkWoll Sì. Perché non c'è molta documentazione sul profiler, voglio sapere se sto trascurando una soluzione esistente. Nel peggiore dei casi questa domanda può fornire una documentazione per le ricerche web future. Se questo è il modo "migliore" probabilmente invierò una patch in modo da non dover eseguire il mio '.replace() 'hack e renderlo il vero modo" ufficiale ". – gregmac

+0

Ho la stessa domanda. Lo stai ancora facendo in questo modo? – Jerry

risposta

1

C'è una supposizione nel codice che @ MiniProfiler.RenderInclude() genera tutto il suo contenuto usando javascript. Sebbene possa essere un'ipotesi valida al momento attuale, potrebbe cambiare.

Perché non semplicemente evitare gli hack del tutto e utilizzare una richiesta Ajax per caricare il profiler? In entrambi gli scenari, sia ajax che a script incorporato, l'atto di inserire il profiler tramite una richiamata influenzerà in qualche modo l'esito del profiling.

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