Ответ 1
Он проверяет, что заголовок X-Requested-With
(HTTP_X_REQUESTED_WITH) установлен в XMLHttpRequest. Этот заголовок задается jQuery и рядом других фреймворков javascript при выполнении запросов AJAX.
Я ранее создал метод на моем базовом контроллере:
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 - единственная необходимая кодировка.)
Он проверяет, что заголовок X-Requested-With
(HTTP_X_REQUESTED_WITH) установлен в XMLHttpRequest. Этот заголовок задается jQuery и рядом других фреймворков javascript при выполнении запросов AJAX.
В частности, код 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. Тем не менее, во время поиска код все еще идентичен тому, что я написал выше.