ASP.NET MVC查找发送Ajax请求的页面

时间:2014-06-27 23:00:23

标签: ajax asp.net-mvc profiling httprequest

我正在为我们的网站实施分析,我基本上只是在Application_BeginRequest()Application_EndRequest()中使用定时器来跟踪请求时间。

问题在于Application_EndRequest(),我可以通过Request.RawUrl获取Ajax请求的网址,但是如何才能获得发送此请求的网页?

2 个答案:

答案 0 :(得分:3)

您可以检查Request.UrlReferrer以获取发出请求的页面,但请记住,某些浏览器可能不会在ajax请求中发送引用,您应该在代码中考虑这种情况。


或者,您应该在所有ajax调用中传递包含当前URL的附加参数。

答案 1 :(得分:1)

除此之外,您还可以使用以下代码传递请求页面网址

$(document).ready(function() {
     jQuery.ajaxSetup({
          beforeSend: function (xhr) {
                xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
                xhr.setRequestHeader('X-Referrer', location.href);//this will do
                return xhr;
          }
     });
});

在服务器端,使用actionfilter并将IsAjaxRequest属性放在控制器类中

[AjaxDetector]
public abstract class SomeController : Controller
{
   public bool IsAjaxRequest { get; set; }
   public string Referrer { get; set; }
}

public class AjaxDetector : ActionFilterAttribute  
{  
    public override void OnActionExecuting(ActionExecutingContext filterContext)  
    {   
        SomeController someController = filterContext.Controller as SomeController;
        if (myController != null)
        {
            if (filterContext.HttpContext.Request.Headers["X-Requested-With"] != null
                && filterContext.HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest")
            {
                someController.IsAjaxRequest = true;
                someController.Referrer=filterContext.HttpContext.Request.Headers["X-Referrer"]
            }
            else
            {
                someController.IsAjaxRequest = false;
            }
        }
    }
}