XMLHttpRequest()不被识别为IsAjaxRequest?

要在会话超时进行Ajax请求时将用户重定向到登录页面,我实现了以下自定义属性,

与Unauthorize request相关的代码如下,

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); 

有没有人遇到类似的问题? 什么是解决方案?

这是ASP.NET MVC 5中IsAjaxRequest()的代码

 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标题有什么意义?

您可以随时查看jQuery $.ajax()代码本身,看看它是如何设置标头的。 说实话,我不打算在没有jQuery的情况下做ajax,它会为你处理所有这些事情。