Web アプリケーションの開発に asp.net mvc 3 を使用しています。MVC サイトのいずれかのページを呼び出すたびにトリガーされるカスタム グローバル アクション フィルターを作成しました。
そのフィルターでは、特定の条件をチェックしています。それらの条件が満たされている場合、ユーザーを「利用できない」ページにリダイレクトしています。1つを除いて、すべての場合で正常に機能しています。
私のデフォルトルートであるホーム/インデックスでは機能していません。アプリケーションを初めて起動すると、ホーム/インデックスがステータス コード 302 (アプリケーションにリダイレクト/使用不可) でフィドラーに表示されます。次に、ブラウザはアプリケーション/利用できないページにリダイレクトしようとします。驚いたことに、このページからホーム/インデックスに再びフィドラーで 302 が表示されます。これがしばらく続くと、Firefox で以下のエラーが発生します
「Firefox は、サーバーがこのアドレスへのリクエストを決して完了しない方法でリダイレクトしていることを検出しました。」
fiddler に 302 の無限ループがあることがわかります。しかし、なぜそれが起こっているのかわかりません。ルーティングで何か間違ったことをしていますか?
私のコードは、ウェブサイトの他のページで機能しています。
これが私のコードです:
routes.MapRoute("Application", "Application/Unavailable", MVC.Application.Unavailable());
routes.MapRoute("Home", "Home/{action}", new {controller = "Home"}, new[] {"Test.Web.Controllers"});
routes.MapRoute("Default", "{controller}/{action}", MVC.Home.Index(), new[] {"Test.Web.Controllers"});
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
...
...
if (conditionmet)
{
RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary();
redirectTargetDictionary.Add("area", "");
redirectTargetDictionary.Add("action", "Unavailable");
redirectTargetDictionary.Add("controller", "Application");
filterContext.Result = new RedirectToRouteResult(redirectTargetDictionary);
}
}