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

Где Request.IsAjaxRequest() в Asp.Net Core MVC?

Чтобы узнать больше о новой захватывающей инфраструктуре Asp.Net-5, я пытаюсь создать веб-приложение, используя недавно выпущенный Visual Studio 2015 CTP-6.

Большинство вещей выглядит очень многообещающе, но я не могу найти Request.IsAjaxRequest() - функциональность, которую я довольно часто использовал в старых проектах MVC.

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

Спасибо за любые советы о том, где его найти или что делать!

4b9b3361

Ответ 1

Я немного смутился, потому что название упоминалось MVC 5.

Искать Ajax в MVC6 github repo не дает никаких релевантных результатов, но вы можете добавить расширение самостоятельно. Декомпиляция из проекта MVC5 дает довольно простой фрагмент кода:

/// <summary>
/// Determines whether the specified HTTP request is an AJAX request.
/// </summary>
/// 
/// <returns>
/// true if the specified HTTP request is an AJAX request; otherwise, false.
/// </returns>
/// <param name="request">The HTTP request.</param><exception cref="T:System.ArgumentNullException">The <paramref name="request"/> parameter is null (Nothing in Visual Basic).</exception>
public static bool IsAjaxRequest(this HttpRequestBase request)
{
  if (request == null)
    throw new ArgumentNullException(nameof(request));
  if (request["X-Requested-With"] == "XMLHttpRequest")
    return true;
  if (request.Headers != null)
    return request.Headers["X-Requested-With"] == "XMLHttpRequest";
  return false;
}

Поскольку MVC6 Controller, похоже, использует Microsoft.AspNet.Http.HttpRequest, d необходимо проверить request.Headers коллекцию для соответствующего заголовка, введя несколько настроек в версию MVC5:

/// <summary>
/// Determines whether the specified HTTP request is an AJAX request.
/// </summary>
/// 
/// <returns>
/// true if the specified HTTP request is an AJAX request; otherwise, false.
/// </returns>
/// <param name="request">The HTTP request.</param><exception cref="T:System.ArgumentNullException">The <paramref name="request"/> parameter is null (Nothing in Visual Basic).</exception>
public static bool IsAjaxRequest(this HttpRequest request)
{
  if (request == null)
    throw new ArgumentNullException("request");

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

или напрямую:

var isAjax = request.Headers["X-Requested-With"] == "XMLHttpRequest"

Ответ 2

в ядре asp.net, вы можете использовать Context.Request.Headers.

bool isAjaxCall = Context.Request.Headers["x-requested-with"]=="XMLHttpRequest"