1

次の問題があります: セッションが期限切れになり、ユーザーが Ajax.Actionlink をクリックすると、ログオン ページが部分的なページとして返されます。

4

2 に答える 2

2

IAuthorizationFilter を実装する ActionFilterAttribute を作成し、OnAuthorization で
ユーザーがログアウトしているかどうかを確認し、
ログアウトしており、これが Ajax リクエスト (filterContext.HttpContext.Request.IsAjaxRequest()) である場合 - filterContext.Result を別の結果に設定します。私は HttpStatusCode.Unauthorized で結果を返すので、クライアントでそれにフックしてそれに応じて反応することができます

Ajax.Actionlink を使用したことはありません。すべての Ajax 呼び出しに jQuery を使用し、グローバル フックを使用してエラー ステータス コードで結果をキャッチします。

于 2012-04-30T08:52:20.987 に答える
1

アクションメソッドの上部にこのようなものが必要になります

        if (Session["UserID"] == null && Request.IsAjaxRequest())
        {
                return Content("<div class=\"error\">Your session was expired. Press Logout and then login again to continue</div>");
        }

更新 (作成したメカニズムに関係なく、認証を確認するときに指定する必要があります)

    public ActionResult Index()
    {
        try
        {
            List<string> rights = objAuthorization.CheckMemberRightsOnPage("page1");
            if (!rights.Contains("View"))
            {
                if (Session["UserID"] == null && Request.IsAjaxRequest())
                {
                    return Content("<div class=\"error\">Your session was expired. Press Logout and then login again to continue</div>");
                }
                return RedirectToAction("Restricted", "UserLogin", new { url = HttpUtility.HtmlEncode(Request.Url.AbsolutePath.Substring(1)) });
            }
            ViewData["objAuthorization1"] = rights;


        //  your other things here
        }
        catch(Exception ex){
           ViewData["ErrorMessage"] = "An error occurred: " + ex.Message;
            return View();   } 

    }
于 2012-04-30T08:49:08.417 に答える