Подтвердить что ты не робот

Asp.net mvc: как определить, когда страница вызывается с помощью ajax

как определить, когда страница вызывается с помощью ajax в asp.net mvc?

4b9b3361

Ответ 1

Согласно книге Professional ASP.NET MVC 1.0, библиотека MVC AJAX вставляет поле формы под названием "X-Requested-With" со значением "XMLHttpRequest".

Затем вы можете использовать метод расширения в System.Web.Mvc, что означает, что вы можете просто вызвать Request.IsAjaxRequest() и получить простое истинное или ложное высказывание, если это запрос AJAX.

Ответ 2

Вы можете проверить это вручную следующим образом:

bool isAjaxRequest = request.Headers["X-Requested-With"] == "XMLHttpRequest";

Или, когда вы находитесь в контроллере ASP.NET MVC, который ссылается на System.Web.Mvc, вы получите метод расширения на объекте HttpRequestBase, доступ к которому вы можете получить в ActionMethod следующим образом:

bool isAjaxRequest = Request.IsAjaxRequest();

Ответ 3

Нет конкретного способа определить, был ли вызов выполнен javascript или непосредственно в браузере, так как это обычный HTTP-вызов.

Вы можете добавить заголовок в свой вызов ajax, чтобы отличить его от других вызовов, или, возможно, добавить параметр к строке запроса, которая используется только для вызовов ajax.

ASP.NET MVC ajax добавляет такой заголовок - X-Requested-With: XMLHttpRequest, который вы можете использовать, чтобы понюхать, что это ajax-вызов библиотеки mjc ajax. Однако, если вы используете jQuery или свои собственные ручные ajax-вызовы, это не будет установлено. Кроме того, другие клиенты могут обманывать этот заголовок (например, с помощью WebClient), поэтому поиск не является гарантией того, что был сделан ajax-вызов.

Ответ 4

Лучший способ проверить, является ли запрос ajax-запросом, - проверить Request.IsAjaxRequest(). Хорошо знать, что под капотом MVC framework проверяет аякс-запросы в параметрах запроса или заголовке запроса. Код в исходном коде ASP.Net MVC:

    public static bool IsAjaxRequest(this HttpRequestBase request) {
        if (request == null) {
            throw new ArgumentNullException("request");
        }

        return (request["X-Requested-With"] == "XMLHttpRequest") || ((request.Headers != null) && (request.Headers["X-Requested-With"] == "XMLHttpRequest"));
    }

Поэтому, если вы хотите проверить его в ручном режиме (что не рекомендуется), вы должны проверить оба.

Ответ 5

Вам нужно будет передать некоторый параметр с помощью вашего вызова AJAX. AJAX - это просто запрос GET, который не отличается от ввода URL-адреса в адресной строке и нажатия клавиши ввода (это значит, что AJAX должен быть защищен от межсайтовых скриптовых атак, иначе злоумышленник может заставить людей выполнять команды AJAX на ваш сайт, просто включив url в изображение)

Ответ 6

Почему это имеет значение? Это не должно. Вы действительно пытаетесь выполнить согласование контента?