3

VS 2010、.NET 4.0、ASP.NET Web アプリケーション プロジェクトを使用しています。

*.aspx を処理するためのカスタム HttpHandler があります。ルート フォルダーには、ルート フォルダーへのアクセスをキャッチし、要求を他の .aspx ページにリダイレクトするためだけに使用される Default.aspx ページがあり、その要求はカスタム ハンドラーによってさらに処理されます。

要求がルート フォルダーに送信された場合、Default.aspx が処理されます。リクエストが *.aspx (Default.aspx 以外) に送信された場合、カスタム ハンドラーがそれを処理します。

プロジェクトから Default.aspx ページを削除しても、ルート アプリケーション フォルダーへの要求をキャッチし、要求をカスタム ハンドラーにリダイレクトできるようにしたいと考えています。

Global.asax にルートを登録してみました:

private void RegisterRoutes(RouteCollection routes)
    {
        routes.MapPageRoute("Default",
            "",
            "~/Default.aspx");
    }

それはうまくいきませんでした。

また、web.config ハンドラーに登録しようとしました。

<add name="DefaultHandler" path="*" verb="*" type="App.DefaultHandler, App" />

しかし、それもうまくいきませんでした。

アップデート:

実際、web.config で定義されたハンドラーpath="*"は機能しますが、サーバーへのすべての要求をキャッチしますが、これは良い習慣ではないと思います。

DefaultModule を作成しました。BeginRequest イベントで、Request の Path プロパティをチェックし、それがデフォルト ページへの要求であると想定します。これまでのところ、とても良いですが、すべての場合に機能するかどうかはわかりません。コードは次のとおりです。

    public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(context_BeginRequest);
    }

    void context_BeginRequest(object sender, EventArgs e)
    {
        HttpRequest request = HttpContext.Current.Request;
        if (request.Path == "/")
        {
            HttpContext.Current.RewritePath("custom.aspx");
        }
    }

誰かがより良いアイデアを持っているなら、私はそれを感謝します、ありがとう。

アップデート:

私はこのソリューションを使用してみました: https://stackoverflow.com/a/1913073/84852 Web サーバーが Default.aspx を要求し、説明されているハンドラーを使用してその要求をキャッチできると考えましたが、アプリケーションは「ファイルが見つかりません」例外。

とにかく、私は HttpModule を使用したソリューションが好きです。他のソリューションが提示されていない場合は、それを使用します。ただコンディションが気if (request.Path == "/")になるので に変更しました

if (context.Request.CurrentExecutionFilePath == context.Request.ApplicationPath)

念のため。

新しいアイデアは引き続き歓迎します。ありがとう。

アップデート:

HttpModule を使用したソリューションは IIS では機能しませんが、VS 開発サーバーでのみ機能します。問題は、リクエストがカスタム HttpHandler (ところで IRequiresSessionState を実装している) に到達したときにセッションが開始されないことです。

4

1 に答える 1

0

あなたの問題を正しく理解していれば、あなたの道は次のようになるはずです:

<add name="DefaultHandler" path="*.aspx" verb="*" type="App.DefaultHandler, App" />

path=* はすべてのリクエストをキャッチしますが、*.aspx は .aspx 拡張子を持つリクエストに制限します。

于 2012-10-08T12:13:59.730 に答える