jak sprawdzić, czy żądanie jest AJAX w asp.net mvc?

108

ktoś, jak mogę wiedzieć, czy żądanie jest AJAX? (Używam jQuery dla Ajax)

Omu
źródło
2
Możesz także użyć Fiddlera do oglądania żądań. W ten sposób wiele się nauczysz.
CrazyDart

Odpowiedzi:

70

Wszystkie wywołania AJAX wykonywane przez jQuery będą miały dodany nagłówek wskazujący, że jest to AJAX. Nagłówek do sprawdzenia to X-Requested-With, a wartość będzie, XMLHttpRequestgdy będzie to wywołanie AJAX.

Zwróć uwagę, że żądania AJAX to zwykłe żądania GET lub POST, więc jeśli Ty (lub Twoja biblioteka AJAX, taka jak jQuery) nie dodasz dodatkowego nagłówka w żądaniu, nie ma sposobu, aby wiedzieć, czy jest to AJAX, czy nie.

RedFilter
źródło
3
@Omu: Request.Headers["X-Requested-With"]lub podobny. Sprawdź MSDN. Nagłówki są zawsze związane z żądaniami.
Robert Koritnik
179

Jest też Request.IsAjaxRequestopcja, jeśli używasz nowszej wersji MVC. Nie mam już wersji 1, więc nie mogę powiedzieć, czy jest w wersji 1.

Jeśli potrzebujesz tego sprawdzenia w Global.asax.cs, spróbuj tego: new HttpRequestWrapper(Request).IsAjaxRequest()

Buildstarted
źródło
1
@BuildStarted Potrzebuję tego czeku w Global.asax.cs, więc to mi nie pomoże
Omu
2
@BuildStarted nie jest dostępny w Application_Error
Omu
1
Tak, masz rację. Dzieje się tak, ponieważ jest poza MVC i nie wykorzystuje HttpRequestBase. Nie potrzebowałem tego, więc nie zajrzałem zbyt głęboko. Dzięki za ostrzeżenie.
Budowa rozpoczęła się
20
new HttpRequestWrapper (Request) .IsAjaxRequest ();
1
BTW: Jeśli jesteś w niestandardowym filtrze autoryzacji, użyj tego, aby uzyskać metodę IsAjaxRequest na żądanie: filterContext.HttpContext.Request.IsAjaxRequest
user1068352
51

U mnie działa w ASP.NET MVC 3

if (Request.IsAjaxRequest())
{
     // ajax request handled
}
Piotr Czyż
źródło
1
Nie jest to dostępne w Application_Error
ajbeaven
1
To nie jest dostępne w Application_BeginRequest
Varadha31590
W Global.asax:new HttpRequestWrapper(Request).IsAjaxRequest()
Morgs,