c# – 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的更多信息

What’s the point of the X-Requested-With header?

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

点赞