2

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);
                }
}
4

1 に答える 1

2

私は問題を解決することができました。MVC サイトでフォーム認証を使用していました。また、ログイン URL は Home/Index として構成されました。そのため、ユーザーが Home/Index から Application/Unavailable にリダイレクトされると、ユーザーが認証されていないため、デフォルト ページに再度リダイレクトされます。

次に、認証からアプリケーション/使用不可ページを除外するために、web.config にロケーション エントリを追加しました。

<location path="Application/Unavailable">
        <system.web>
            <authorization>
                <allow users="*" />
            </authorization>
        </system.web>
    </location>

そして、私のコードはホーム/インデックスページで完全に機能するようになりました.

于 2013-08-01T03:53:44.387 に答える