Как дать уведомление перед перенаправлением в режим входа при использовании Asp.Net Identity?

Я использовал структуру Asp.Net Identity в своем приложении. Необходимо, чтобы по истечении срока действия сеанса выдавалось сообщение с подсказкой, а затем переходил на страницу входа вместо прямого перехода на страницу входа. Подсказка с использованием пользовательских стилей. Поскольку левые меню моего приложения загружают представление с помощью ajax, поэтому я переписал метод AuthorizeAttribute.HandleUnauthorizedRequest, чтобы вернуть json. Теперь, когда пользователи щелкают левые меню, он может работать правильно. Но если пользователи обновляют страницу, нажав F5, страница все равно будет сразу перейти на страницу входа.

Я уже переопределил AuthorizeAttribute.HandleUnauthorizedRequest

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        var httpContext = filterContext.HttpContext;
        string sintab = httpContext.Request["inTab"];            

        if (!string.IsNullOrEmpty(sintab) && bool.Parse(sintab))
        {
            var result = new JsonResult();
            result.Data = new
            {
                Authorize = false,
                Url = LOGIN_URL
            };
            result.JsonRequestBehavior = JsonRequestBehavior.AllowGet;

            filterContext.Result =result;
            return;
        }
        if (filterContext.Controller.GetType() != typeof(Controllers.HomeController) && 
            !filterContext.ActionDescriptor.ActionName.Equals("Index", StringComparison.OrdinalIgnoreCase))
        {
            string returnUrl = "/" + filterContext.Controller.GetType().Name.Replace("Controller","") + "/Index" ;
            returnUrl = httpContext.Server.UrlEncode(returnUrl);
            httpContext.Response.Redirect("~/Account/Login?ReturnUrl="+returnUrl);
            return;
        }

        base.HandleUnauthorizedRequest(filterContext);
    }

Код левого меню loadView js

        $.get(url, null, function (html) {
        html = html.replace(/#%/g, "\"").replace(/%#/g, "\"");
        var json;
        try {
            json = eval("(" + html + ")");
        } catch (e) {

        }
        if (json && !json.Authorize) {
            // give an message
            layer.alert("Session timeout, please re login.", function (index) {
                window.location.href = json.Url + "?returnurl=" + encodeURI(hash);
            });
        }
        else {
            $("#content").empty().html(html);
            _initModalButton();
            $("#content").show();
        }

    }, 'html');

Страница выглядит следующим образом: введите здесь описание изображения

Я хочу знать, есть ли какие-то лучшие способы сделать это, потому что есть много других кнопок, которые нужно проверить статус авторизации и показать сообщение перед переходом на страницу входа, и как дать сообщение, когда пользователи обновляют страницу?

Спасибо большое!


person Ivan.Yu    schedule 10.05.2016    source источник


Ответы (1)


Я думаю, что вы ищете Global Ajax Events. Пожалуйста, проверьте это, я думаю, это облегчит вашу работу .

person Tistkle    schedule 10.05.2016