Мини-профилировщик не отображает информацию запроса ajax? - PullRequest
4 голосов
/ 24 ноября 2011

Я использую мини-профилировщик в моем приложении asp.net MVC 3. Я реализовал профилировщик с помощью пакета mvc nuget. Все работает нормально для стандартных запросов страниц, я получаю информацию профиля все.

Однако запросы AJAX изначально не отображаются. Просто, чтобы подтвердить, что запрос выполнен без ошибок. Я отладил это, и они завершают, они также возвращают ответы HTTP 200 в Fiddler.

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

Это моя страница конфигурации мини-профилировщика в App_Start

public static class MiniProfilerPackage
    {
        public static void PreStart()
        {
            //Setup sql formatter
            MiniProfiler.Settings.SqlFormatter = new OracleFormatter();

            //Make sure the MiniProfiler handles BeginRequest and EndRequest
            DynamicModuleUtility.RegisterModule(typeof(MiniProfilerStartupModule));

            //Setup profiler for Controllers via a Global ActionFilter
            GlobalFilters.Filters.Add(new ProfilingActionFilter());

            //Settings            
            MiniProfiler.Settings.PopupShowTimeWithChildren = true;
            MiniProfiler.Settings.PopupShowTrivial = false;            

            //Ignore glimpse details in miniprofiler
            var ignored = MiniProfiler.Settings.IgnoredPaths.ToList();
            ignored.Add("Glimpse.axd");
            MiniProfiler.Settings.IgnoredPaths = ignored.ToArray();
        }

        public static void PostStart()
        {
            // Intercept ViewEngines to profile all partial views and regular views.
            // If you prefer to insert your profiling blocks manually you can comment this out
            var copy = ViewEngines.Engines.ToList();
            ViewEngines.Engines.Clear();
            foreach (var item in copy)
            {
                ViewEngines.Engines.Add(new ProfilingViewEngine(item));
            }
        }
    }

    public class MiniProfilerStartupModule : IHttpModule
    {
        public void Init(HttpApplication context)
        {
            context.BeginRequest += (sender, e) =>
            {
                var request = ((HttpApplication)sender).Request;

                MiniProfiler.Start();
            };

            //Profiling abadened if user is not in the admin role
            context.PostAuthorizeRequest += (sender, e) =>
            {
                if (!context.User.IsInRole("Admin"))
                    MiniProfiler.Stop(discardResults: true);
            };

            context.EndRequest += (sender, e) =>
            {
                MiniProfiler.Stop();
            };
        }

        public void Dispose() { }
    }

Требуется ли какая-либо конфигурация или потенциальные проблемы, о которых мне следует знать?

Ответы [ 2 ]

8 голосов
/ 28 ноября 2011

В конце концов я понял, что блок JavaScript Miniprofiler, добавляемый на страницу, должен быть ниже ссылки jquery на страницы.

Все мои ссылки на JavaScript добавлены в конце страницы из соображений эффективности.

Но я бы оставил @ MvcMiniProfiler.MiniProfiler.RenderIncludes () в заголовке страницы. Перемещение его ниже ссылки на скрипт jquery внизу страницы решило мою проблему.

0 голосов
/ 28 октября 2012

Только что обнаружил, что такая же ситуация повторится, если

$.ajaxSetup({
    global: false
});
...