ASP.NET MVC находит, какая страница отправила запрос Ajax

#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;
            }
        }
    }
}