2011-12-03 10 views
0

あなたが助けてくれることを願っています。私のASP.net MVC3アプリケーションでは、すべての私のコントローラは、私が作成したカスタマイズされたコントローラの下にあります。MVC FormsAuthenticationタイムアウト - AJAXの考慮事項

FormsAuthenticationがタイムアウトすると、私のアプリケーションはページにアクセスしようとするとユーザーをログインページに正しくリダイレ​​クトします(標準機能)。

しかし、Ajax.ActionLinkとAjax.BeginFormの呼び出しでは、何も返されません。ブラウザが20分間以上開いてからAjaxリンクにアクセスしようとすると、ユーザーに混乱が生じます。

インバウンドAjaxコールを検出してタイムアウトしたときに、ユーザーがログインページに期待どおりにリダイレクトされるように、一般的に動作するベースコントローラに入れることができるコードはありますか?

後で元のページに戻らないかどうかは気にしません。ホームインデックスページに行くだけでうれしいです。

お手数ですがお寄せいただきありがとうございます。

サイモン。

答えて

4

FormsAuthenticationモジュールがAJAXリクエストの場合にログオンページにリダイレクトされないようにし、それに応じて401ステータスコードをクライアントに送信するのを防ぐための良い方法を示しています(following blog post)。 。

+0

こんにちはダーリン、お返事ありがとうございます。実際には、それは私が欲しいのは逆の動作です - 私は、Ajaxであろうと通常の呼び出しであろうと、ログインページに常に戻るようにしたいと思います。私はすべてのAJAXコールで401に応答する必要はありません - 私はそれが私のベースコントローラに組み込まれた標準的な動作にしたい。そして、Ajaxフォームは一般的にdivのページの一部をレンダリングするので、私はLoginフォームをフルページリダイレクトにする必要があります。これはdivセクションには表示されません。ありがとう、サイモン。 – SimonGoldstone

+1

@サイモン、問題は、AJAXを使用してサーバーが401ステータスコードを返さない場合、セッションが期限切れになったためにログオンページにリダイレクトされた神かどうかを知る方法がないか、ページ。どちらの場合も、200のステータスコードとHTMLが得られます。あなたはそれに応じて行動することはできません。有効期限が切れたセッションで401ステータスコードを返すようにサーバを設定すると、AJAX 401エラーコールバックで 'window.location.href'を使用できるようになります。これは、セッションが期限切れになったことを知り、単にブラウザをログオンにリダイレクトするページ。 –

+0

こんにちはダーリン、助けてくれてありがとう。私の次の質問は、どのように私はこの動作をデフォルトで設定できますか?私は文字通り何百ものAJAXコールが私のアプリ全体に拍車をかけてきました。私は実際には、手動でこの状態を具体的に処理する必要はありません。おそらくJQueryを使ってこのデフォルトの動作を設定する方法はありますか? – SimonGoldstone

関連する問題