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 を実装している) に到達したときにセッションが開始されないことです。