我有一个授权过滤器类:
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
结果,框架也总是返回重定向到登录页面。
有没有办法阻止这种行为?
答案 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;
}