为了在 Ajax 请求会话超时时将用户重定向到登录页面,我实现了以下自定义属性,
与未授权请求相关的代码如下,
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.HttpContext.Response.StatusCode = 403;
filterContext.Result = new JsonResult
{
Data = new
{
Error = "SessionTimeOut"
},
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
filterContext.HttpContext.Response.End();
}
....................
这对于 ajax 请求($.ajax)来说效果很好。
但filterContext.HttpContext.Request.IsAjaxRequest() 无法将XMLHttp 请求识别为ajax 请求。
var xhr = new XMLHttpRequest();
xhr.open('POST', "...URL");
xhr.send(formdata);
有人遇到过类似的问题吗?对此有什么解决方案吗?
这是代码IsAjaxRequest()
在 ASP.NET MVC 5 中
public static bool IsAjaxRequest(this HttpRequestBase request)
{
if (request == null)
{
throw new ArgumentNullException("request");
}
return request["X-Requested-With"] == "XMLHttpRequest" || (request.Headers != null && request.Headers["X-Requested-With"] == "XMLHttpRequest");
}
看起来好像依赖于某个标头值(X-Requested-With
) 存在于请求中以便该函数返回 true。
这里有一些更多信息X-Requested-With
X-Requested-With 标头有什么意义? https://stackoverflow.com/questions/17478731/whats-the-point-of-x-requested-with-header
你总是可以看看 jQuery$.ajax()
代码本身以查看如何设置标头。老实说,如果没有 jQuery,我就不会费心做 ajax,它会为你处理所有这些事情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)