1

我有一个授权过滤器类:

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结果,框架总是返回重定向到登录页面。

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

4

2 回答 2

0

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

if (context.Response.StatusCode==4100)
 {
       context.Response.StatusCode=401;
  }
于 2013-04-12T09:13:31.760 回答
0

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

ps如果你真的需要这个,我可以找到负责这个的代码女巫。

于 2013-04-12T09:03:56.033 回答