Сценарий: Здесь я пытаюсь обработать тайм-аут сеанса при вызове ajax, но после многих попыток я смог решить эту проблему.Я пытался как следует.
Вот несколько принятых ответов, за которыми я следовал.https://stackoverflow.com/a/5242746
AuthorizeAttribute
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class AuthorizeFilter : AuthorizeAttribute
{
public string[] AllowedUserTypes { get; set; }
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (ManageSession.UserDetail == null)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
HandleUnauthorizedRequest(filterContext);
}
else
{
filterContext.Result = (new RedirectController().RedirectToHome());
}
}
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.HttpContext.Response.StatusCode = 401;
filterContext.Result = new JsonResult
{
Data = new
{
message = "sorry, but you were logged out"
},
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
filterContext.HttpContext.Response.End();
return;
}
else
{
base.HandleUnauthorizedRequest(filterContext);
}
}
}
Код контроллера
[AuthorizeFilter(AllowedUserTypes = new string[] { "DataEntry", "Admin" })]
public class MarksEntryController : BaseController
{
public JsonResult CheckSession()
{
return Json("Check Session");
}
}
Ajax Call
$("#btnsaveSession").click(function () {
$.ajax(
{
url: '@Url.Action("CheckSession", "MarksEntry")',
datatype: JSON,
error: function (response) {
debugger;
alert(response);
},
success: function (response) {
debugger;
if (response == 401) {
location.reload();
}
}
});
});
Пожалуйста, дайте мне знать, где я делаю ошибку.Заранее спасибо.