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


108

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


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.


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()


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
}

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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.