0

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 を処理することであり、ログインから一致したロールが着信ページのロールと一致することを願っています。しかし、ログイン システムはリダイレクト先のページとは別のシステムに存在するため、それについては確信が持てません。

4

1 に答える 1

0

さて、私は customerror を取り除き、javascript がインターセプトするサーバーからカスタム 403 例外をスローすることにしました。次に、アクセス拒否ページにリダイレクトします。

これは私のC#コードです

if (!allowedRoles)
{
     Logout();
     throw new HttpException(403, "User does not have permissions to view this page");
}

次に、私のjqueryで:

function onLoginError(error, textStatus) {
    var jsonErrorData = JSON.parse(error.responseText).Message;
    $('#status').text(jsonErrorData );
}

そして私のweb.config

<customErrors mode="Off"></customErrors>
于 2013-06-03T22:17:42.870 に答える