Не удается заставить MVC MiniProfiler отображаться на веб-сайте ASP.net

Мой файл web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <configSections>
    <section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter" />
  </configSections>
  <system.web>
    <customErrors mode="On" redirectMode="ResponseRewrite">
      <error statusCode="500" redirect="~/Content/ErrorPages/500.aspx" />
      <error statusCode="404" redirect="~/Content/ErrorPages/404.aspx" />
    </customErrors>
    <compilation debug="true" targetFramework="4.5.1" />
    <httpRuntime targetFramework="4.5.1" />
    <httpModules>
      <add type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter" name="UrlRewriter" />
    </httpModules>
  </system.web>
  <rewriter configSource="Config\URLRewrites.config" />
  <appSettings configSource="Config\Settings.config" />
    <system.webServer>
      <validation validateIntegratedModeConfiguration="false" />
      <httpErrors errorMode="Custom">
            <remove statusCode="500" subStatusCode="-1" />
            <remove statusCode="404" subStatusCode="-1" />
            <error statusCode="404" path="/Content/ErrorPages/404.aspx" responseMode="ExecuteURL" />
            <error statusCode="500" path="/Content/ErrorPages/500.aspx" responseMode="ExecuteURL" />
        </httpErrors>
        <modules runAllManagedModulesForAllRequests="true">
          <remove name="UrlRewriter" />
          <add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule,Intelligencia.UrlRewriter" preCondition="managedHandler" />
        </modules>
      <handlers>
        <add name="MiniProfiler" path="mini-profiler-resources/*" verb="*" type="System.Web.Routing.UrlRoutingModule" resourceType="Unspecified" preCondition="integratedMode" />
      </handlers>
    </system.webServer>    
</configuration>

Мой глобальный.asax:

using System;
using System.Web;
using StackExchange.Profiling;

namespace C3
{
    public class Global : HttpApplication
    {
        protected void Application_BeginRequest(object sender, EventArgs e)
        {
            // Force to HTTPS
            if (!HttpContext.Current.Request.IsSecureConnection)
            {
                Response.Redirect(Settings.SecureRootDomain + HttpContext.Current.Request.RawUrl);
            }

            if (Request.IsLocal)
            {
                MiniProfiler.Start();
            } 
        }

        protected void Application_EndRequest()
        {
            MiniProfiler.Stop();
        }
    }
}

Страница содержания:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="C3.Default"%>
<%@ Import Namespace="C3.Code" %>
<%@ Import Namespace="StackExchange.Profiling" %>
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <%
        SEO.CheckURL("/");
    %>
    <title></title>
    <%=MiniProfiler.RenderIncludes() %>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        dum de dum
    </div>
    </form>

</body>
</html>

И код позади:

protected void Page_Load(object sender, EventArgs e)
{
    var profiler = MiniProfiler.Current; // it's ok if this is null
    using (profiler.Step("Set page title"))
    {
        Page.Title = "Home Page";
    }
    using (profiler.Step("Doing complex stuff"))
    {
        using (profiler.Step("Step A"))
        { // something more interesting here
            Thread.Sleep(100);
        }
        using (profiler.Step("Step B"))
        { // and here
            Thread.Sleep(250);
        }
    }
}

Есть идеи, почему MiniProfiler ничего не показывает?

Обновить

Если я открою https://127.0.0.1:3333/mini-profiler-resources/includes.js в своем браузере, он вернет файл JS! Он просто не отображает включения на самой странице.

Если я захожу на /mini-profiler-resources/results, выдает ошибку:

В экземпляре объекта не задана ссылка на объект.

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

Сведения об исключении: System.NullReferenceException: ссылка на объект не указывает на экземпляр объекта.

Ошибка источника:

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

Трассировки стека:

[NullReferenceException: ссылка на объект не указывает на экземпляр объекта.]
StackExchange.Profiling.MiniProfilerHandler.GetSingleProfilerResult (контекст HttpContext) в c:\TeamCity\buildAgent\work\1de24adb938b932d\StackExchange.Profiling\MiniProfilerHandler.cs:292 StackExchange.Profiling.MiniProfilerHandler.ProcessRequest(контекст HttpContext) в c:\TeamCity\buildAgent\work\1de24adb938b932d\StackExchange.Profiling\MiniProfilerHandler.cs:93 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() + 912 System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, логическое значение и завершено синхронно) +164


person Tom Gullen    schedule 27.07.2015    source источник
comment
Вы видели эту проблему github? Точно так же выбрасывается исключение. github.com/MiniProfiler/dotnet/issues/96   -  person Andrei    schedule 29.07.2015
comment
@Andrei Андрей, да, я видел это, если я добавлю его, он остановит исключение 500, но теперь возвращает 404. Включает в себя все еще не отображаемые на странице.   -  person Tom Gullen    schedule 29.07.2015
comment
Я бы сказал, что 500 -> 400 — это улучшение. Возможно, что-то еще не так, но я бы сохранил это исправление.   -  person Andrei    schedule 29.07.2015
comment
@Андрей, да, наверное, ты прав. Искал в Google часами, не совсем уверен, что делать дальше с этой проблемой   -  person Tom Gullen    schedule 29.07.2015
comment
Забегая вперед, во всех найденных мною примерах уже был зарегистрирован jquery на странице. У вас его нет. На самом деле это не должно быть проблемой, но просто из любопытства попробуйте передать в RenderIncludes параметр useExistingjQuery:false   -  person Andrei    schedule 29.07.2015
comment
проверьте этот URL: miniprofiler.com, я считаю, что тот же метод, что и в ответе ниже   -  person user5135401    schedule 29.07.2015
comment
@Андрей Парам не имеет значения   -  person Tom Gullen    schedule 29.07.2015
comment
@HadiHassan использовал for (int i = 0; i < 100000; i++) { Response.Write(i); }, без разницы, без рендеринга   -  person Tom Gullen    schedule 29.07.2015
comment
Можете ли вы проверить, имеет ли MiniProfiler.Current значение или оно равно null в Page_Load?   -  person Hack    schedule 29.07.2015
comment
@Hack, это null после запуска в global.asax, до того, как я остановлю его в global.asax и на странице содержимого (везде ноль!)   -  person Tom Gullen    schedule 29.07.2015
comment
@TomGullen, какой полный URL-адрес этой страницы Default.aspx? Есть ли /content/ в URL-адресе, например. /content/Default.aspx?   -  person Hack    schedule 29.07.2015
comment
@Hack, URL-адрес в браузере https://127.0.0.1:3333/, но он переписан с использованием правила <rewrite url="^/(\?(.+))?$" to="~/Content/Default.aspx$1" processing="stop"/>. Является ли каталог Content причиной какого-то конфликта?   -  person Tom Gullen    schedule 29.07.2015
comment
@Хак, ты гений! Переименовал папку в Pages и все работает! Пожалуйста, напишите это как ответ, и я приму его: D   -  person Tom Gullen    schedule 29.07.2015


Ответы (1)


Убедитесь, что страницы, отображающие MiniProfiler, не содержат игнорируемый путь в URL-адресе, указанном MiniProfiler.Settings.IgnoredPaths, который по умолчанию имеет /content/, /scripts/ и /favicon.ico. Страница с URL-адресом /content/Default.aspx не будет отображать MiniProfiler, тогда как /Pages/Default.aspx покажет его.

Либо удалите /content/ из MiniProfiler.Settings.IgnoredPaths.

person Hack    schedule 29.07.2015