11 Stimmen

MVC Mini Profiler beinhaltet das Nicht-Respektieren des Anwendungspfads.

Ich habe den MVC Mini Profiler eingerichtet, wie auf seiner Projektseite beschrieben, und die Einbindungen werden tatsächlich auf der Seite geschrieben.

Das Problem ist, meine Anwendung befindet sich unter http://localhost:8080/web, und das Markup, das vom Profiler generiert wird, sieht so aus:

 jQuery(function() { MiniProfiler.init({ id:'fb4dc30e-c1aa-4be6-902c-ef2812dd1fe2', renderDirection:'left' }); } ); 

All diese Links führen natürlich zu 404-Fehlern, aber wenn ich zu /web/mini-profiler-includes.less? navigiere, wird es korrekt geladen.

Der Quellcode, der diesen String erstellt, kann hier gefunden werden:

// MiniProfilerHandler.cs
/// 
/// Versteht, wie man MiniProfiler-UI-Urls routet und darauf reagiert.
/// 

public class MiniProfilerHandler : IRouteHandler, IHttpHandler
{
    internal static HtmlString RenderIncludes(MiniProfiler profiler, RenderPosition? position = null, bool showTrivial = false, bool showTimeWithChildren = false)
    {
        const string format =
            @"

             jQuery(function() {{ MiniProfiler.init({{ id:'{2}', path:'{0}', renderDirection:'{3}', showTrivial: {4}, showChildrenTime: {5} }}); }} ); ";

        var pos = position ?? (MiniProfiler.Settings.RenderPopupButtonOnRight ? RenderPosition.Right : RenderPosition.Left);

        var result = profiler == null ? "" : string.Format(format,
                                                       EnsureEndingSlash(HttpContext.Current.Request.ApplicationPath),
                                                       MiniProfiler.Settings.Version,
                                                       profiler.Id,
                                                       pos.ToString().ToLower(),
                                                       showTrivial ? "true" : "false",
                                                       showTimeWithChildren ? "true" : "false");

        return new HtmlString(result);
    }

    // rest of the code
}

Warum liefert Request.ApplicationPath nicht den Pfad meiner Anwendung zurück? Mache ich etwas falsch, oder sollte ich ein Problem auf der mvc-mini-profiler Seite melden?

BEARBEITEN: Um die Dinge noch merkwürdiger zu machen, habe ich einen Haltepunkt beim MiniProfiler.RenderIncludes() Aufruf gesetzt und überprüft, was der Wert von HttpContext.Current.Request.ApplicationPath zu diesem Zeitpunkt war, und es war "/web"! Sehr mysteriös.

BEARBEITEN 2: Es sieht so aus, als hätten sie in der neuesten Version (vor 2 Stunden :)) Unterstützung für virtuelle Pfade hinzugefügt, und das NuGet-Paket (über das ich es installiert habe) ist nicht ganz auf dem neuesten Stand. Ich werde das untersuchen...

2voto

adamjford Punkte 7368

Der neueste Quellcode wird bezogen (dieser Commit ist zum Zeitpunkt dieses Beitrags der aktuellste), das Projekt wird erstellt, die DLL wird heruntergeladen und referenziert anstelle des Projekts, das das Problem behoben hat.

BEARBEITEN: Zum jetzigen Zeitpunkt ist das NuGet-Paket auf dem neuesten Stand mit dem letzten Commit, also NuGet verwenden!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X