asp.net mvc: как определить, когда страница вызывается с помощью ajax - PullRequest
17 голосов
/ 18 января 2010

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

Ответы [ 6 ]

35 голосов
/ 18 января 2010

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

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

7 голосов
/ 18 января 2010

Вы можете проверить это вручную так:

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

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

bool isAjaxRequest = Request.IsAjaxRequest();
5 голосов
/ 18 января 2010

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

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

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

4 голосов
/ 18 января 2010

Лучший способ проверить, является ли запрос ajax-запросом, - это проверить Request.IsAjaxRequest(). Полезно знать, что внутренняя структура MVC проверяет ajax-запросы в параметрах запроса или заголовке запроса. Код в исходном коде 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"));
    }

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

0 голосов
/ 18 января 2010

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

0 голосов
/ 18 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...