comment savoir si la demande est ajax dans asp.net mvc?

108

quelqu'un comment puis-je savoir si la demande est ajax? (J'utilise jquery pour ajax)

Omu
la source
2
Vous pouvez également utiliser Fiddler pour regarder les requêtes. Vous apprendrez beaucoup en faisant cela.
CrazyDart

Réponses:

70

Tous les appels AJAX effectués par jQuery auront un en-tête ajouté pour indiquer qu'il s'agit d'AJAX. L'en-tête à vérifier est X-Requested-With, et la valeur sera XMLHttpRequestquand il s'agit d'un appel AJAX.

Notez que les requêtes AJAX sont des GET ou POST normaux, donc à moins que vous (ou votre bibliothèque AJAX comme jQuery) n'ajoutiez un en-tête supplémentaire dans la requête, il n'y a aucun moyen de savoir avec certitude s'il s'agit d'AJAX ou non.

RedFilter
la source
3
@Omu: Request.Headers["X-Requested-With"]ou similaire. Vérifiez MSDN. Les en-têtes sont toujours liés aux demandes.
Robert Koritnik
179

Il y a aussi le Request.IsAjaxRequestsi vous utilisez une version ultérieure de MVC. Je n'ai plus la version 1 donc je ne peux pas dire si c'est en version 1.

Si vous avez besoin de cette vérification dans Global.asax.cs, essayez ceci: new HttpRequestWrapper(Request).IsAjaxRequest()

Buildstarted
la source
1
@BuildStarted J'ai besoin de cette vérification dans Global.asax.cs donc cela ne m'aidera pas
Omu
2
@BuildStarted n'est pas disponible dans Application_Error
Omu
1
Oui vous avez raison. C'est parce qu'il est en dehors de MVC et ne l'utilise pas HttpRequestBase. Je n'ai pas eu besoin de ça, alors je n'ai pas cherché trop profondément. Merci pour l'information.
Construit
20
new HttpRequestWrapper (Request) .IsAjaxRequest ();
1
BTW: Si vous êtes à l'intérieur du filtre d'autorisation personnalisé, utilisez ceci pour obtenir la méthode IsAjaxRequest sur Request: filterContext.HttpContext.Request.IsAjaxRequest
user1068352
51

Cela fonctionne pour moi dans ASP.NET MVC 3

if (Request.IsAjaxRequest())
{
     // ajax request handled
}
Piotr Czyż
la source
1
Ce n'est pas disponible dans Application_Error
ajbeaven
1
Ce n'est pas disponible dans Application_BeginRequest
Varadha31590
Dans Global.asax:new HttpRequestWrapper(Request).IsAjaxRequest()
Morgs