シナリオ
カスタム認証/認証方法を使用する ASP.NET プロジェクトがあります (フォーム/ウィンドウ認証などを使用するのではなく)。安全なページが読み込まれるたびに、次のコードが実行されます。
protected void Page_Load(Object sender, EventArgs e)
{
if (!IsLoggedIn)
{
HttpContext.Current.Response.Redirect("~/Login/", true);
}
}
このコードは基本的に、ユーザーがまだログインしているかどうか (ASP.NET セッションの有効期限が切れていないか、ログアウトしていないかなど) をチェックします。ユーザーがログインしていない場合はResponse.Redirect()
、ログイン ページに送られます。
このシナリオは、ユーザーが (リンクまたは直接 URL を介して) 完全なページを要求する場合に完全に機能します。非同期ポストバックを使用すると問題が発生します。
の中にボタンがネストされているため、<asp:UpdatePanel>
クリックすると非同期ポストバックが発生します。このボタンは、<asp:Label />
. 例えば:
<!-- the button -->
<asp:LinkButton ID="MyButton" CausesValidation="false" Text="My Button" OnClick="MyButton_Click" runat="server" />
<!-- the label -->
<asp:Label ID="MyLabel" runat="server" />
protected void MyButton_Click(Object sender, EventArgs e)
{
MyLabel.Text = DateTime.Now.ToString();
}
問題
非同期ポストバックが実行中で、IsLoggedIn
false の場合、リクエストはログイン ページにリダイレクトされます。現在、ASP.NET Framework は (HTML ページではなく) 特定の応答を期待しています。したがって、次のエラーがスローされます。
質問
この問題を解決するにはどうすればよいですか? 非同期ポストバック中にページ全体をコード ビハインドから特定のアドレスに強制的にリダイレクトするにはどうすればよいですか?