Подтвердить что ты не робот

Как использовать MiniProfiler с одним веб-приложением для веб-приложений/REST?

У меня есть одностраничное javascript-приложение (сделано с JavascriptMvc) и бэкэнд с REST-сервисами, созданными поверх ASP.NET MVC3 (выполняется с 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, минипрофилер показывает его в углу. Использование параметра showControls:true здесь очень полезно, так что появляется кнопка очистки, потому что в противном случае вы просто получаете постоянный список действий, так как вся страница по существу никогда не обновляется.

Является ли это "правильным" способом сделать это, или есть лучший способ?

4b9b3361

Ответ 1

В вашем коде есть предположение, что @MiniProfiler.RenderIncludes() генерирует все содержимое с помощью javascript. Хотя это может быть допустимым предположением в настоящее время, это может измениться.

Почему бы просто не избежать хаков вообще и использовать запрос ajax для загрузки профилировщика? В любом сценарии, будь то ajax или embedded script, действие вставки профайлера через обратный вызов несколько повлияет на результат профилирования.

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