Я знаю, что это дубликат, но я не мог получить надежное решение (для веб-сайта asp.net).
Я просто хочу перенаправить на страницу входа в систему, если сеанс истекает. Я пробовал следующее:
1. с использованием кода состояния jquery
$.ajax({
type: "POST",
url: "stream.asmx/SomeMethod",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
//success msg
},
error: function (request, status, error) {
if (status = 403) {
location.href = 'login.aspx';
}
}
});
Проблема: возвращает тот же код статуса (403) для других ошибок, который я ожидаю только для таймаута сеанса.
2. Отправка сообщения json о том, закончился ли сеанс
код позади:
if (!object.Equals(HttpContext.Current.Session["User"], null))
{
Id = int.Parse(HttpContext.Current.Session["User"].ToString());
}
else
{
result = from row in dtscrab.AsEnumerable()
select new
{
redirectUrl = "login.aspx",
isRedirect = true
};
}
для успеха $.ajax:
success: function (msg) {
if (msg.d[0].isRedirect) {
window.location.href = msg.d[0].redirectUrl;
}
else {
//load containt
}
}
Проблема:. Он почему-то не вызывает строку успеха ajax, если сеанс истекает (он возвращает правильный json). И даже это неверно, если у меня много запросов ajax на странице (нужно обрабатывать глобально).
Однако я видел этот пост, который действительно хорош, но для mvc используется AuthorizeAttribute
: handling-session-timeout-in-ajax-calls
Итак, я могу использовать ту же концепцию, которая используется в mvc, используя AuthorizeAttribute в asp.net web api? Если нет, то как я могу устранить проблему, с которой я столкнулся (какой-либо из вышеупомянутых двух)?