ASP.NET MVC - Что на самом деле означает IsAjaxRequest ()? - PullRequest
22 голосов
/ 24 декабря 2010

Я ранее создал метод на своем базовом контроллере:

public bool IsJsonRequest()
{
    var acceptTypes = Request.AcceptTypes;
    return acceptTypes != null && 
           acceptTypes.Any(a => a.Equals("application/json",
                                         StringComparison.OrdinalIgnoreCase));
}

Тогда я наткнулся на AjaxRequestExtensions.IsAjaxRequest(). Документация для него очень расплывчатая :

true, если указанный HTTP-запрос является AJAX-запросом; в противном случае - ложь.

Это заставило меня задуматься, что это делает с HTTP-запросом, который делает его AJAX? Есть ли что-то большее, чем проверка принятых типов запрашивающего контента, или кодирование не является обязательным условием «AJAX»?

(Обратите внимание, что в моем случае мои действия должны вызываться только со страниц JS на моем сайте, а JSON является единственной необходимой кодировкой.)

Ответы [ 2 ]

31 голосов
/ 24 декабря 2010

Проверяется, для заголовка X-Requested-With (HTTP_X_REQUESTED_WITH) задано значение XMLHttpRequest.Этот заголовок устанавливается jQuery и рядом других инфраструктур javascript при выполнении запросов AJAX.

6 голосов
/ 22 мая 2015

В частности, код IsAjaxRequest можно разбить на функцию:

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"));
}

Редактировать - 21 января 2019

Я вернулся к своему ответу и обнаружил, что моя ссылка на IsAjaxRequest теперь не работает. Я обновил его с помощью текущей ссылки, но это репозиторий AspNetWebStack и, как таковой, это не версия кода MVC v3. Тем не менее, во время поиска код все еще идентичен тому, что я написал выше.

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