6
[Authorize]
public class MyController : BaseController
{
    [PermissionAuthorize]
    public ActionResult GridData()
    {
        return Json(data, JsonRequestBehavior.AllowGet);
    }
}

特定のアクションに対するユーザーのアクセス許可を確認するための PermissionAuthoize 属性を作成しました。私は問題があります ユーザーセッションまたはチケットがその時点で期限切れになった後、ユーザーがコントローラーに ajax 要求を送信し、承認属性が要求を拒否し、ユーザーに html ログインフォームとして返されます。この地域のユーザーは、アプリが実行されていないと考えています。ユーザーへの悪影響を示します。

そのため、チケットの有効期限が切れたときにユーザーが ajax リクエストを送信した場合、ユーザーをログイン ページにリダイレクトしたいと考えています。

コントローラー用にもう 1 つの承認属性を作成できますか?

4

2 に答える 2

5

最初に行う必要があるのは、401 がスローされたときにログオン ページへのリダイレクトを停止するようにフォーム認証モジュールを構成することです。Phil Haack は、nice articleこれをどのように達成できるかについて書いています。

これを行うと、クライアントで 401 HTTP ステータス コードをキャプチャできるようになります。したがってglobal ajax handler、401 ステータス コードがサーバーから送信されたときにログオン ページにリダイレクトする を記述できます (これは、フォーム認証チケットの有効期限が切れるか、ユーザーがまったく認証されていない場合に発生します)。

$(document).ajaxError(function(event, jqxhr, settings, exception) {
    if (jqxhr.status == 401) {
        // unauthorized
        window.location.href = '/logon';
    }
});
于 2013-03-14T07:47:42.370 に答える
3

次のコードが役立つ場合があります。

$.ajax({
    url: 'url',    
    statusCode: {
        404: function() {
            //page not found
        },
        200: function() {
            //ok, do your stuff
        },
        302: function() {
            //redirect - check if url contains login and do redirect            
        }
    }
})

基本的に、リダイレクトを確認してコールバックで通常のことを行うことしかできませんsuccess/errorが、リダイレクト http ヘッダーを取得したら、window.location.href を目的のログイン ページに変更します。

于 2013-03-14T07:44:54.873 に答える