Asp.net MVC AuthorizationFilter和AjaxRequests

时间:2013-04-12 08:18:36

标签: asp.net-mvc asp.net-mvc-4 action-filter

我有一个授权过滤器类:

public class ValidateSessionTokenFilter : IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationContext filterContext)
    {
        if (filterContext.HttpContext.Request.IsAjaxRequest())
        {
            filterContext.Result = new JsonResult
            {
                Data = new { Message = "Session timeout" },
                JsonRequestBehavior = JsonRequestBehavior.AllowGet
            };
            filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
        }
    }
}

过滤器有效,但问题是即使我强制返回类型为JsonResult结果,框架也总是返回重定向到登录页面。

有没有办法阻止这种行为?

2 个答案:

答案 0 :(得分:0)

这是HttpStatusCode.Unauthorized的MVC问题,它总是重定向。我们通过返回自定义错误代码来“修复”此问题。

P.S。如果你真的需要这个,我可以找到代码女巫负责这一点。

答案 1 :(得分:0)

当你返回401时,这是表单身份验证的默认行为.Afaik没有 设置为在.Net<中禁用该行为4.5所以,除了使用你自己的auth系统之外,解决方法是这样的: - 返回自定义代码(类似于4100) - 挂钩EndRequest事件然后检查出来

if (context.Response.StatusCode==4100)
 {
       context.Response.StatusCode=401;
  }