MVCミニプロファイラーには、アプリケーションのパスを尊重しないことが含まれます

StackOverflow https://stackoverflow.com/questions/6308890

質問

MVC Mini Profilerが説明されているように設定されています プロジェクトページ, 、および含まれるものは実際にページに書かれています。

問題は、私のアプリケーションがあります http://localhost:8080/web, 、およびプロファイラーによって書かれたマークアップには、次のように見えます。

<link rel="stylesheet/less" type="text/css" href="/mini-profiler-includes.less?v=2.0.4177.17902">
<script type="text/javascript" src="/mini-profiler-includes.js?v=2.0.4177.17902"></script>
<script type="text/javascript"> jQuery(function() { MiniProfiler.init({ id:'fb4dc30e-c1aa-4be6-902c-ef2812dd1fe2', renderDirection:'left' }); } ); </script>

もちろん、これらはすべて404エラーを与えますが、 /web/mini-profiler-includes.less?, 、それはうまくロードされます。

その文字列を作成するソースを見つけることができます ここ:

// MiniProfilerHandler.cs
/// <summary>
/// Understands how to route and respond to MiniProfiler UI urls.
/// </summary>

public class MiniProfilerHandler : IRouteHandler, IHttpHandler
{
    internal static HtmlString RenderIncludes(MiniProfiler profiler, RenderPosition? position = null, bool showTrivial = false, bool showTimeWithChildren = false)
    {
        const string format =
            @"<link rel=""stylesheet/less"" type=""text/css"" href=""{0}mini-profiler-includes.less?v={1}"">
            <script type=""text/javascript"" src=""{0}mini-profiler-includes.js?v={1}""></script>
            <script type=""text/javascript""> jQuery(function() {{ MiniProfiler.init({{ id:'{2}', path:'{0}', renderDirection:'{3}', showTrivial: {4}, showChildrenTime: {5} }}); }} ); </script>";

        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
}

Request.ApplicationPathがアプリケーションのパスを返していないのはなぜですか?私は何か間違ったことをしているのですか、それともMVC-Mini-Profilerページに問題を提出する必要がありますか?

編集: 物事をさらに奇妙にするために、私はブレークポイントを置きます MiniProfiler.RenderIncludes() 電話をかけて、その価値を確認しました HttpContext.Current.Request.ApplicationPath その瞬間でした、そしてそれはそうでした "/web"!とても神秘的です。

編集2: :最新バージョン(2時間前)の仮想パスのサポートが追加されているように見えますが、Nugetパッケージ(これがインストールされた方法です)は完全に最新ではありません。調査...

役に立ちましたか?

解決

最新のソースを引く(このコミット この投稿の最新のものである)、プロジェクトを構築し、DLLをつかみ、プロジェクトのNugetパッケージを使用する代わりに問題を修正したことを参照してください。

編集: :今のところ、Nugetパッケージは最新のコミットで最新であるため、Nuget Away!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top