2012-01-26 10 views
0

ASP.Net MVCのルーティングマジックは、特にエラー処理とリダイレクトに関して、時々困惑します。ASP.Net MVC2:RewritePathを* .aspxターゲットで動作させることができません。

http://foobar.com/Home/Indexが機能するのはなぜですか?http://foobar.com/Home/Index.aspxは404を生成しますか?

私は時々リダイレクトをしたいので、これは私には重要:

protected void Application_BeginRequest(object sender, EventArgs e) { 
    if (some condition) { 
     HttpContext.Current.RewritePath("Home/Index.aspx"); 
    } 
} 

現状では、このスニペットは動作しません。 .aspx接尾辞を残して404を取得した場合、それを削除すると、Application_BeginRequestへの呼び出しのカスケードが取得されます。

おかげでいつものように、そのルーティングで定義されたURLパターンのルールに従っ ダフィー

答えて

0

ASP.NET MVCマップのURL。指定されたURLと一致するルーティングルールが存在しない場合のみ、MVCは要求されたURLが物理ファイル用であるとみなします(またその機能が有効になっている場合のみ)。

しかし、 "home/index.aspx"と一致するルーティングパターン(またはルート)がない場合、そのURLで動作するハンドラは定義されておらず、MVCは後退します物理ファイルが要求されたものとみなします。そのパスに物理ファイルがないので、404が返されます。実際には、そのファイルは存在しません。あなたが持っていることは分かっていますが、別の場所(/views/home/index.aspx)にあります。

ただし、正しいパス(「/views/home/index.aspx」など)をリクエストしても、「views」フォルダにweb.configファイルがあるため、404が表示されますそのような方法ですべてのファイルにアクセスすることを禁じるルール(基本的にはコントローラ内からしかアクセスできません)。

したがって、別のコントローラ/アクションにリクエストを転送する必要がある場合は、それを行うための方法がいくつかあります。

How to simulate Server.Transfer in ASP.NET MVC?

How do I use Server.Transfer method in asp.net MVC?

ああ、「some_conditionは」純粋にURLパスのマッチングであれば、あなたはおそらくルーティングレベルであることを実行する必要があります。これらのスレッドがお手伝いしますかどうかを確認してください。

+0

これは、このようなことがうまくいかないことを意味しますか? (これは最初のスニペットで思いついたことです)http://www.codeproject.com/Tips/219637/Put-the-website-in-Maintanance-Mode-Under-Construc – duffy

+0

もう1つのコメント:サーバーIISの設定方法(統合されたパイプラインはありません)のため、転送は私のためには機能しません。 – duffy

関連する問題