在我的MVC应用程序中,实现会话超时重定向功能。
现在,所有请求都是通过AJAX完成的,因此,在AJAX请求时,如果超时,它应该重定向到会话超时页面。
我尝试了几种来自网络的方法,但它现在已经解决了。
我没有使用 - [AUTHROIZE]属性用于安全性。只使用自定义登录身份验证。
尝试了以下方法,但没有成功。它没有达到属性。
问题是,URL会附加“RetrunURL”参数而无法解决。
/// <summary>
/// Extend AuthorizeAttribute to correctly handle AJAX authorization
/// </summary>
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MyAuthorizeAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.HttpContext.Response.StatusCode = 401;
filterContext.Result = new JsonResult
{
Data = new
{
Error = “NotAuthorized”,
LogOnUrl = FormsAuthentication.LoginUrl
},
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
filterContext.HttpContext.Response.End();
}
else
{
// this is a standard request, let parent filter to handle it
base.HandleUnauthorizedRequest(filterContext);
}
}
}
Now, we need to modify our client sciptt to handle 401 response code:
getData = function(request) {
$.ajax({
url: “/home/GetData”,
type: “POST”,
data: request,
contentType: “application/json;”,
dataType: “json”,
success: function (repJSON) {
},
error: function (xhr) {
if (xhr.status === 401) {
window.location.href=xhr.Data.LogOnUrl;
return;
}
}
});
pLease指南如何解决此问题。