2 つのレベルの例外処理が発生するという問題があります。
jQuery を使用して ajax リクエストを作成し、サーバーからカスタム エラー例外をスローします。これは基本的にステータスコード 500 エラーです。
これは、「ユーザーが存在しません」や「パスワードが一致しません」などのために作成しているログイン ページで動的に取得されます。ユーザーは新しいページにリダイレクトされず、ステータスは単にステータス更新として更新されます。これは現在動作します。
ただし、ユーザーが正常にログインすると、ページにリダイレクトされます。この新しいページは、ユーザーがページを表示する役割を割り当てられているかどうかを確認します。web.config からの customerrors がオフになっているため、ユーザーは死の黄色いページに移動します。ユーザーにアクセス許可がないか、アクセスが拒否されたことを示します。
これを処理する論理的な方法は、403 エラーのページをリダイレクトし、それを で構成することですweb.config
。
<customErrors mode="RemoteOnly">
<error statusCode="403" redirect="~/accessdenied.aspx"/>
</customErrors>
これは、ユーザーが十分なロールを持っていない場合に機能しますが、500 個のエラー リクエストを処理する jQuery を使用して元に戻ると、空のメッセージが表示され、エラー レスポンスを解析する方法がわからないという JavaScript エラーがスローされます。
これはstackoverflowで尋ねられた同様の質問ですが、役に立たなかった:
customErrors mode="On" を使用した ASP.NET の jQuery ajax
私の質問とその質問の違いは、ログインが 403 および 500 エラーを処理することです。ログインすると、500 エラーを処理し、403 エラーを処理する新しいページに移動します。web.config に変更を加えると、サイト全体のエラー処理が変更されます。
要約すると、customerrors モード = オフの場合、jQuery 例外は機能しますが、カスタム 403 リダイレクトは機能しません。customerrors モード = オン。jQuery 例外は機能しませんが、403 リダイレクトは機能します。
誰でも思いつくことができるこれを修正する方法はありますか?私が考えた 1 つの方法は、ログインでも 403 を処理することであり、ログインから一致したロールが着信ページのロールと一致することを願っています。しかし、ログイン システムはリダイレクト先のページとは別のシステムに存在するため、それについては確信が持てません。