我以前在我的基本控制器上创建了一个方法:
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是唯一必需的编码。)
答案 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版本。也就是说,在查看时,代码仍然与我上面写的相同。