12

Asp.NetMVCアプリケーションでMvcMiniProfilerを使用しようとしています。最新のNuGetパッケージをインストールし、wikiページのすべてのコードをに追加しましApplication_BeginRequest()Application_AuthenticateRequest()

ページを読み込むと、ミニプロファイラーのすべてのJavaScriptファイルが含まれ、サーバーから正しくダウンロードされますが、結果を取得しようとすると、Chromeは次のように表示します。

GET http://localhost:59269/mini-profiler-results?id=59924d7f-98ba-40fe-9c4a-6a163f7c9b08&popup=1 404 (Not Found)

これは、MVCでルートが設定されて/mini-profiler-resultsいないためだと思いますが、それを行う方法が見つかりません。Googleのコードページを見るとGlobal.asax.cs、サンプルアプリのファイルにいくつかの変更が加えられています。1回目はMvcMiniProfiler.MiniProfiler.RegisterRoutes()、、2回目MvcMiniProfiler.MiniProfiler.Init()は、、3回目は何もしません。前述の2つの機能は存在しないため、段階的に廃止されたと思います。

この時点で、このエラーを修正してアプリでプロファイラーを使用する方法がわかりません。何か案は?


私のGlobal.Asax.csファイルは次のようになります。

public class Global : System.Web.HttpApplication
{
    protected void Application_BeginRequest()
    {
        MvcMiniProfiler.MiniProfiler.Start();
    }

    protected void Application_AuthenticateRequest(Object sender, EventArgs e)
    {
        // Only show profiling to admins
        if (!Roles.IsUserInRole(Constants.AdminRole))
            MvcMiniProfiler.MiniProfiler.Stop(discardResults: true);
    }

    protected void Application_Start(object sender, EventArgs e)
    {
        AreaRegistration.RegisterAllAreas();
        RegisterRoutes(RouteTable.Routes);
    }

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");

        routes.MapRoute(
        "Default",
            // Route name
        "{controller}/{action}/{id}",
            // URL with parameters
        new { controller = "Home", action = "Index", id = "" }
            // Parameter defaults
        );
    }
}
4

1 に答える 1

22

このRegisterRoutes()メソッドは、静的コンストラクターによって自動的に(適切な書き込みロックなどを使用して)呼び出されるようになりました。静的コンストラクターは、最初に呼び出すときに呼び出される必要がありますMiniProfiler.Start()。これにより、ルートがルートテーブルに挿入されます。

したがって、プロファイラーに最初に触れたのある時点でルートテーブルを明示的にクリアしない限り、 (すべてが等しい)機能するはずです。

これはセキュリティの問題なのだろうか。たとえば、どのバージョンのIISを使用していますか?一部の構成(特にIIS6)では、サーバーがパスを認識するか、ワイルドカードを有効にする必要があります。その場合は、お知らせください。ashxなどへのフォールバックルートを実装できる可能性があります。


更新:問題は、クエリの最後に結果を保存していないことです。短期ストレージと長期ストレージの両方があり、どちらにもデフォルトの実装が提供されています。必要なのは次のようなものだけです。

protected void Application_EndRequest(object sender, EventArgs e)
{
    MiniProfiler.Stop(discardResults: !IsAnAdmin());
}

<system.webServer>アップデートアップデート:web.configの<handlers>セクションに以下を追加する必要がある場合もあります。

<add name="MiniProfiler" path="mini-profiler-resources/*" verb="*"
    type="System.Web.Routing.UrlRoutingModule" resourceType="Unspecified"
    preCondition="integratedMode" />
于 2011-06-27T18:54:48.273 に答える