asp.net mvc:如何检测使用ajax调用页面的时间

时间:2010-01-18 15:24:54

标签: jquery asp.net-mvc ajax

如何检测在asp.net mvc中使用ajax调用页面的时间?

6 个答案:

答案 0 :(得分:35)

根据Professional ASP.NET MVC 1.0一书,MVC AJAX库将插入一个名为“X-Requested-With”的表单字段,其值为“XMLHttpRequest”。

然后,您可以在System.Web.Mvc中使用扩展方法,这意味着您只需调用Request.IsAjaxRequest()并获得一个简单的真或假说法,如果这是一个AJAX请求。

答案 1 :(得分:7)

你可以像这样手动检查:

bool isAjaxRequest = request.Headers["X-Requested-With"] == "XMLHttpRequest";

或者当您在ASP.NET MVC中的Controller中,它引用了 System.Web.Mvc 时,您将在extension-method对象上获得HttpRequestBase,您可以在ActionMethod中访问,如下所示:

bool isAjaxRequest = Request.IsAjaxRequest();

答案 2 :(得分:5)

没有特定的方法可以确定是通过javascript还是直接在浏览器中进行,因为它是常规的http调用。

您可以为ajax调用添加标头,以区别于其他调用,或者可能将参数添加到仅用于ajax调用的查询字符串。

ASP.NET MVC ajax确实添加了这样的标头 - X-Requested-With: XMLHttpRequest,您可以使用它来嗅探这是mvc ajax库的ajax调用。但是,如果您使用jQuery或您自己的手滚动ajax调用,则不会设置此项。此外,其他客户端可能会欺骗此标头(例如,使用WebClient),因此找到它并不能保证已经进行了ajax调用。

答案 3 :(得分:4)

检查请求是否为ajax请求的最佳方法是检查Request.IsAjaxRequest()。很高兴知道,在引擎盖下,MVC框架会在请求参数或请求标头中检查ajax请求。 ASP.Net MVC源代码中的代码是:

    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"));
    }

因此,如果您想要手动检查(不建议这样做),您必须同时检查它们。

答案 4 :(得分:0)

你需要通过AJAX调用传递一些参数--AJAX只是一个GET请求,没有什么不同,然后在地址栏中输入一个url并按Enter键(这就是为什么AJAX必须防止跨站点脚本攻击,否则攻击者只需将URL包含在图像中即可强制人们对您的站点执行AJAX命令

答案 5 :(得分:-7)

为什么重要?它不应该。你真的想做内容谈判吗?