Я использовал структуру 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');
Страница выглядит следующим образом:
Я хочу знать, есть ли какие-то лучшие способы сделать это, потому что есть много других кнопок, которые нужно проверить статус авторизации и показать сообщение перед переходом на страницу входа, и как дать сообщение, когда пользователи обновляют страницу?
Спасибо большое!