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

ASP.NET MVC - что означает IsAjaxRequest()?

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

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

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

В частности, код 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. Тем не менее, во время поиска код все еще идентичен тому, что я написал выше.