#ajax #asp.net-mvc #profiling #httprequest
#ajax #asp.net-mvc #профилирование #httprequest
Вопрос:
Я внедряю профилирование для нашего сайта, и я в основном просто использую таймеры Application_BeginRequest()
и Application_EndRequest()
отслеживаю время запроса.
Проблема в Application_EndRequest()
том, что я могу получить URL-адрес запроса Ajax Request.RawUrl
, но как я могу узнать, какая страница отправила этот запрос?
Ответ №1:
Вы можете проверить Request.UrlReferrer
, чтобы получить страницу, с которой был отправлен запрос, но имейте в виду, что некоторые браузеры могут не отправлять referer в запросах ajax, и вы должны учитывать этот случай в своем коде.
В качестве альтернативы, вы должны передать дополнительный параметр, содержащий текущий URL, во всех ваших вызовах ajax.
Комментарии:
1. Потрясающе! Именно то, что я искал.
Ответ №2:
Наряду с этим вы можете использовать приведенный ниже код для передачи 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
amp;amp; filterContext.HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest")
{
someController.IsAjaxRequest = true;
someController.Referrer=filterContext.HttpContext.Request.Headers["X-Referrer"]
}
else
{
someController.IsAjaxRequest = false;
}
}
}
}