Как мне использовать MiniProfiler с одностраничным веб-приложением / бэкэндом REST? - PullRequest
20 голосов
/ 23 марта 2012

У меня есть одностраничное приложение javascript (с JavascriptMvc) и серверная часть со службами REST, построенными на основе ASP.NET MVC3 (с NServiceMVC).

Службы REST имеют установленный и запущенный MiniProfiler, и заголовки X-MiniProfiler-Ids возвращаются с каждым запросом AJAX.У меня действительно работает и работает минипрофилер, но я не смог найти никакой информации по этому поводу, и поэтому я не уверен, правильно ли я это делаю.

Это поддерживаемый сценарий, и есть ли конкретный способ сделать это сейчас?


Что я сейчас делаю, это:

В приложении 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 здесь также очень полезно, поэтому появляется кнопка очистки, потому что в противном случае вы просто получаете постоянный список действий, поскольку вся страница практически никогда не обновляется.

Это «правильный» способ сделать это или есть лучший способ?

1 Ответ

1 голос
/ 04 марта 2014

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

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

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