web-dev-qa-db-fra.com

Où se trouve Request.IsAjaxRequest () dans Asp.Net Core MVC?

Pour en savoir plus sur le nouveau cadre passionnant Asp.Net-5, j'essaie de créer une application Web à l'aide du nouveau Visual Studio 2015 CTP-6.

La plupart des choses semblent vraiment prometteuses, mais je n'arrive pas à trouver Request.IsAjaxRequest () - une fonctionnalité que j'utilise assez fréquemment sur les anciens projets MVC.

Y a-t-il une meilleure façon de faire cela - qui leur a fait supprimer cette méthode - ou est-ce "caché" ailleurs?

Merci pour tout conseil sur où le trouver ou quoi faire à la place!

48
mikal

Je suis devenu un peu confus, car le titre mentionnait MVC 5.

Recherchez Ajax dans le repo MVC6 github ne donne aucun résultat pertinent , mais vous pouvez ajouter l'extension vous-même. La décompilation du projet MVC5 donne un morceau de code assez simple:

/// <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;
}

Étant donné que MVC6 Controller semble utiliser Microsoft.AspNet.Http.HttpRequest , vous devez vérifier request.Headers collection pour l'en-tête approprié en introduisant quelques ajustements à la version 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;
}

ou directement:

var isAjax = request.Headers["X-Requested-With"] == "XMLHttpRequest"
90
Patryk Ćwiek

dans le noyau asp.net, vous pouvez utiliser Context.Request.Headers.

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