请在MVC中实现AJAX会话超时重定向

时间:2014-10-07 12:01:27

标签: jquery asp.net-mvc asp.net-mvc-4 session-timeout action-filter

在我的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指南如何解决此问题。

0 个答案:

没有答案