我正在爲我們的站點執行分析,我基本上只使用Application_BeginRequest()
和Application_EndRequest()
中的定時器來跟蹤請求時間。ASP.NET MVC找到哪個頁面發送了Ajax請求
問題是,在Application_EndRequest()
中,我可以通過Request.RawUrl
獲取Ajax請求的URL,但是如何才能獲取哪個頁面發送了此請求?
我正在爲我們的站點執行分析,我基本上只使用Application_BeginRequest()
和Application_EndRequest()
中的定時器來跟蹤請求時間。ASP.NET MVC找到哪個頁面發送了Ajax請求
問題是,在Application_EndRequest()
中,我可以通過Request.RawUrl
獲取Ajax請求的URL,但是如何才能獲取哪個頁面發送了此請求?
您可以檢查Request.UrlReferrer
以獲取發起請求的頁面,但請記住,某些瀏覽器可能不會在ajax請求中發送referer,並且您應該在代碼中解釋此情況。
或者,您應該在所有ajax調用中傳遞一個包含當前url的附加參數。
隨着,你可以用下面的代碼來傳遞請求的頁面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;
}
}
}
}
真棒!正是我在找的東西。 – Technolar