2014-06-27 93 views
1

我正在爲我們的站點執行分析,我基本上只使用Application_BeginRequest()Application_EndRequest()中的定時器來跟蹤請求時間。ASP.NET MVC找到哪個頁面發送了Ajax請求

問題是,在Application_EndRequest()中,我可以通過Request.RawUrl獲取Ajax請求的URL,但是如何才能獲取哪個頁面發送了此請求?

回答

3

您可以檢查Request.UrlReferrer以獲取發起請求的頁面,但請記住,某些瀏覽器可能不會在ajax請求中發送referer,並且您應該在代碼中解釋此情況。


或者,您應該在所有ajax調用中傳遞一個包含當前url的附加參數。

+0

真棒!正是我在找的東西。 – Technolar

1

隨着,你可以用下面的代碼來傳遞請求的頁面URL

$(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; 
      } 
     } 
    } 
}