首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >处理ajax调用中的会话超时

处理ajax调用中的会话超时
EN

Stack Overflow用户
提问于 2011-03-09 05:59:20
回答 8查看 74.4K关注 0票数 56

我正在使用jquery对asp.net mvc控制器操作进行ajax调用:

代码语言:javascript
复制
[AcceptVerbs(HttpVerbs.Post)]
        public ActionResult GetWeek(string startDay)
        {
            var daysOfWeek = CompanyUtility.GetWeek(User.Company.Id, startDay);
            return Json(daysOfWeek);
        }

当会话超时时,此调用将失败,因为用户对象存储在会话中。我创建了一个自定义的authorize属性,以便检查会话是否丢失并重定向到登录页面。这适用于页面请求,但不适用于ajax请求,因为您不能从ajax请求重定向:

代码语言:javascript
复制
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
    public class AuthorizeUserAttribute : AuthorizeAttribute
    {
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            if (!httpContext.Request.IsAjaxRequest())
            {//validate http request.
                if (!httpContext.Request.IsAuthenticated
                    || httpContext.Session["User"] == null)
                {
                    FormsAuthentication.SignOut();
                    httpContext.Response.Redirect("~/?returnurl=" + httpContext.Request.Url.ToString());
                    return false;
                }
            }
            return true;
        }
    }

我在另一个线程上读到,当用户未通过身份验证而您发出ajax请求时,您应该将状态代码设置为401 (未授权),然后在js中检查并将其重定向到登录页面。然而,我不能让它工作:

代码语言:javascript
复制
protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (Request.IsAjaxRequest() && (!Request.IsAuthenticated || User == null))
            {
                filterContext.RequestContext.HttpContext.Response.StatusCode = 401;
            }
            else
            {
                base.OnActionExecuting(filterContext);
            }
        }

基本上,它会将其设置为401,但随后它将继续执行控制器操作,并抛出一个未设置为对象错误实例的对象ref,然后将错误500返回给客户端js。如果我更改自定义Authorize属性来验证ajax请求,并为那些未经过身份验证的请求返回false,这将使ajax请求返回我的登录页面,这显然是不起作用的。

我该如何让它工作呢?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5238854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档