ASP.NET MVC - IsAjaxRequest()实际上意味着什么?

时间:2010-12-24 02:18:46

标签: .net asp.net-mvc ajax asp.net-mvc-3

我以前在我的基本控制器上创建了一个方法:

public bool IsJsonRequest()
{
    var acceptTypes = Request.AcceptTypes;
    return acceptTypes != null && 
           acceptTypes.Any(a => a.Equals("application/json",
                                         StringComparison.OrdinalIgnoreCase));
}

然后我偶然发现AjaxRequestExtensions.IsAjaxRequest()documentation for it is very vague

  

如果指定的HTTP请求是AJAX请求,则为true;否则为false。否则,错误。

这让我想到了,它使得它成为AJAX的HTTP请求是什么?除了检查请求者接受的内容类型还是编码不是“AJAX”的要求之外,还有更多内容吗?

(请注意,在我的情况下,我的操作只能从我网站上的JS页面调用,而JSON是唯一必需的编码。)

2 个答案:

答案 0 :(得分:31)

它检查设置为XMLHttpRequest的X-Requested-With(HTTP_X_REQUESTED_WITH)标头。在生成AJAX请求时,此标头由jQuery和许多其他javascript框架设置。

答案 1 :(得分:6)

具体来说,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"));
}

编辑 - 2019年1月21日

我回到我的回答,发现我与IsAjaxRequest的链接现已破裂。我用当前链接更新了它,但这是AspNetWebStack repo,因此,不是代码的MVC v3版本。也就是说,在查看时,代码仍然与我上面写的相同。