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

Dre*_*kes 23 .net ajax asp.net-mvc asp.net-mvc-3

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

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

然后我偶然发现了AjaxRequestExtensions.IsAjaxRequest().它的文档非常模糊:

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

这让我想到了,它使得它成为AJAX的HTTP请求是什么?它是否比检查请求者接受的内容类型还要多,或者编码不是"AJAX"的要求?

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

tva*_*son 32

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


Dan*_*son 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"));
}
Run Code Online (Sandbox Code Playgroud)

编辑 - 2019年11月21日

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