如何检测在asp.net mvc中使用ajax调用页面的时间?
答案 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)
为什么重要?它不应该。你真的想做内容谈判吗?