【问题标题】:ASP.NET MVC - What does IsAjaxRequest() actually mean?ASP.NET MVC - IsAjaxRequest() 实际上是什么意思?
【发布时间】:2010-12-24 02:18:45
【问题描述】:

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

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;否则为假。

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 谢谢。好的,所以它只是了解请求是否从浏览器内部发起的一种手段?
    • @Drew - 我将其描述为一种方便,而不是表明请求是通过 AJAX 发起的万无一失的标志。伪造标题相对容易。
    • 同意。再次感谢。顺便说一句,这实际上是由 JS 框架设置的,还是 XmlHttpRequest 不可避免的特性?对于上下文:我想让我的 HTTP 请求足够小以适合单个 TCP 数据包,并且在某些情况下删除非必要的 HTTP 标头可以实现这一点。
    • @Drew - jQuery 将其添加到请求中。我认为其他框架也是如此。
    • jQuery、MS AJAX 和其他几个框架将其添加到传出标头中。但请注意 tvanfosson 所说的 - 这只是为了方便。除了检查标头之外,该逻辑还具有启发式方法,并且可以由恶意客户端伪造。主要用例是为响应选择某种特定格式(或添加一些额外数据),如果恶意客户端诱使您认为这是 AJAX 请求而不是普通浏览器请求,这通常不会产生不利影响。
    【解决方案2】:

    具体来说,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 存储库,因此不是代码的 MVC v3 版本。也就是说,在查看时,代码仍然与我上面写的相同。

    【讨论】:

      猜你喜欢
      • 2018-08-08
      • 1970-01-01
      • 1970-01-01
      • 2020-02-15
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多