0

$.ajax を使用してコントローラーからデータを取得する MVC アプリケーションがあります。

残念ながら、セッション タイムアウトが発生した場合、ページはログイン ページにリダイレクトされません。誰かがこの問題を解決できますか?

ありがとうございました。

4

2 に答える 2

2

カスタムの [Authorize] 属性を記述して、クライアント スクリプトがシナリオを適切に処理できるようにする不正アクセスの場合に 401 例外をスローする代わりに、JSON を返すことができます。

AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if (filterContext.HttpContext.Request.IsAjaxRequest())
        {
            filterContext.Result = new JsonResult
            {
                Data = new 
                { 
                    // put whatever data you want which will be sent
                    // to the client
                    message = "sorry, but you were logged out" 

                },
                JsonRequestBehavior = JsonRequestBehavior.AllowGet
            };
        }
        else
        {
            base.HandleUnauthorizedRequest(filterContext);
        }
    }
}

ajaxでは、これを行うことができます:

$.get('@Url.Action("SomeAction")', function (result) {
    if (result.message) {
        alert(result.message);
        window.location.reload();
    } else {
        // do whatever you were doing before with the results
    }
});
于 2012-07-19T05:57:02.897 に答える
0

デフォルトでページがリダイレクトすることを想定している場合は、特定のタイムアウト/認証エラーをキャッチし、このエラーに基づいてクライアントからログインコントローラーにリダイレクトすることができます

ここにこの記事から取られた例があります

http://haacked.com/archive/2011/10/04/prevent-forms-authentication-login-page-redirect-when-you-donrsquot-want.aspx

  $.ajax({
  url: "/yourservlet",
  data: { },
  complete: function(xmlHttp) {
     if(xmlHttp.status==401)
      {
    // redirect to login page

     }
  }
});
于 2012-07-19T05:47:00.577 に答える