cómo detectar cuándo se llama a una página usando ajax en asp.net mvc?asp.net mvc: cómo detectar cuándo se llama a una página usando ajax
Respuesta
De acuerdo con el libro Professional ASP.NET MVC 1.0, la biblioteca MVC AJAX insertará un campo de formulario llamado "X- Solicitado: con "con un valor de" XMLHttpRequest ".
Luego, puede usar un método de extensión en System.Web.Mvc, lo que significa que simplemente puede llamar al Request.IsAjaxRequest()
y obtener un simple verdadero o falso diciendo si se trata de una solicitud AJAX.
No hay una manera específica de determinar si la llamada fue realizada por javascript o directamente en el navegador, ya que es una llamada http regular.
Puede agregar un encabezado a su llamada ajax para distinguirlo de otras llamadas, o posiblemente agregar un parámetro a la cadena de consulta que solo se utiliza en llamadas ajax.
ASP.NET MVC ajax agrega tal encabezado - X-Requested-With: XMLHttpRequest
, que puede usar para oler que se trata de una llamada ajax de la biblioteca mvc ajax. Sin embargo, si está utilizando jQuery o su propia mano hizo rodar llamadas ajax, esto no se establecerá. Además, otros clientes pueden falsificar este encabezado (usando WebClient, por ejemplo), por lo que encontrarlo no garantiza que se haya realizado una llamada ajax.
+1 para sugerir un parámetro como en un proyecto con una gran cantidad de solicitudes, obtuve al azar solicitudes Ajax de navegadores móviles que tenían 'Request.IsAjaxRequest()' devolviendo falso !!! Tuve que agregar un parámetro querystring (como 'partial = 1') a mis solicitudes para estar en el lado seguro. –
Debería pasar algún parámetro con su llamada AJAX - AJAX es solo una solicitud GET, no es diferente a escribir una url en la barra de direcciones y presionar enter (esta es la razón por la que AJAX debe protegerse contra ataques de scripts cruzados, de lo contrario, un atacante puede obligar a las personas a ejecutar comandos AJAX en su sitio simplemente incluyendo la url en una imagen)
¿Por qué es importante? No debería. ¿Estás realmente tratando de hacer una negociación de contenido?
SÍ importa. Por ejemplo, es posible que no desee devolver una página HTML completa, sino solo una parcial. – jgauffin
A continuación, agregue un parámetro a la url.Servir contenido diferente solo porque la solicitud se originó en un tipo diferente de cliente es un mal diseño. Este método bloquea ese comportamiento en las solicitudes ajax. ¿Qué sucede si luego desea obtener todo el contenido de la página a través de ajax (Oops, can not)? ¿Qué pasa si luego escribe una aplicación de escritorio que quiere contenido parcial? (Oops, tampoco puedo hacer eso, ya que no es una solicitud de AJAX). – Ryan
¿Hablas en serio? ¿Por qué querrías buscar una página html completa sobre ajax? No hay nada que ganar en comparación con el uso de una solicitud normal. Escribir un cliente de escritorio que quiere contenido parcial? ¿Estás construyendo un navegador web? ;) 'Servir contenido diferente solo porque la solicitud se originó en un tipo diferente de cliente es un mal diseño' El cliente es el mismo, solo se obtiene la solicitud que difiere. – jgauffin
Puede comprobarlo manualmente así:
bool isAjaxRequest = request.Headers["X-Requested-With"] == "XMLHttpRequest";
O cuando estás en un controlador en ASP.NET MVC, que hace referencia a System.Web.Mvc obtendrá una extension-method en el HttpRequestBase objeto, al que puede acceder dentro de un ActionMethod así:
bool isAjaxRequest = Request.IsAjaxRequest();
Tenga en cuenta: en un proyecto con una gran cantidad de solicitudes, recibí solicitudes Ajax al azar de navegadores móviles que tenían 'Request.IsAjaxRequest()' devolviendo false !!! Tuve que agregar un parámetro querystring (como 'partial = 1') a mis solicitudes para estar en el lado seguro. –
la mejor manera de comprobar si la petición es una petición AJAX es comprobar Request.IsAjaxRequest()
. Es bueno saber que bajo el capó, el marco MVC verifica las solicitudes ajax en los parámetros de solicitud O en el encabezado de la solicitud. El código en el código fuente ASP.Net MVC es:
public static bool IsAjaxRequest(this HttpRequestBase request) {
if (request == null) {
throw new ArgumentNullException("request");
}
return (request["X-Requested-With"] == "XMLHttpRequest") || ((request.Headers != null) && (request.Headers["X-Requested-With"] == "XMLHttpRequest"));
}
Así que si quieres comprobarlo mannually (no recomendado) usted tiene que comprobar ambos.
- 1. ASP.NET MVC página de carga con AJAX
- 2. Control personalizado ASP.NET: ¿cuándo se llama a LoadPostData()?
- 3. ¿Cómo se llama Error.cshtml en ASP.NET MVC?
- 4. ASP MVC: ¿Cuándo se llama IController Dispose()?
- 5. ¿Cómo puedo detectar cuándo se carga una página web?
- 6. ¿Cómo puedo detectar una actualización de página usando jquery?
- 7. Detectar llamada ajax, ASP.net
- 8. ¿Cuándo se llama a didRegisterForRemoteNotificationsWithDeviceToken?
- 9. ¿Cuándo se llama a viewDidLoad?
- 10. ASP.NET MVC Controller.OnException no se llama
- 11. ¿Cuándo se llama a initWithCoder?
- 12. ¿Cuándo se llama a 'drawRect'?
- 13. ¿Cuándo se llama a ServiceConnection.onServiceDisconnected()?
- 14. ASP.NET MVC AJAX con jQuery
- 15. ASP.NET MVC no llama a global.asax 'EndRequest
- 16. ASP.NET MVC HTML.AntiForgeryToken() con múltiples solicitudes AJAX desde una página
- 17. ASP.net MVC AntiForgeryToken sobre AJAX
- 18. Detectar si y cuándo se realizan llamadas jQuery AJAX
- 19. ASP.NET MVC y AJAX
- 20. Redirecciona a la página 404 programáticamente usando asp.net MVC
- 21. asp.net mvc parámetro de la página a una vista parcial
- 22. ASP.Net MVC 3.0 Ajax.BeginForm está redirigiendo a una página?
- 23. ASP.NET MVC AJAX Calendario
- 24. View.onDraw() --- ¿cuándo se llama?
- 25. Eliminar, ¿cuándo se llama?
- 26. ¿Cuándo se llama a una referencia de subrutina en @INC?
- 27. ¿Cómo saber si se llama a una actividad usando startActivityForResult o simplemente se llama usando startActivity?
- 28. ¿Cuándo se llama a UIViewController viewDidUnload?
- 29. ASP.NET MVC ActionFilter - Determine si AJAX Request
- 30. cuándo utilizar knockout javascript con ASP.NET MVC
Si bien esto será confiable en la mayoría de los casos, creo que el solicitante debe ser consciente de que esto * puede * ser falsificado fácilmente. –
Tenga en cuenta: en un proyecto con una gran cantidad de solicitudes, recibí solicitudes Ajax al azar de navegadores móviles que tenían 'Request.IsAjaxRequest()' devolviendo false !!! Tuve que agregar un parámetro querystring (como 'partial = 1') a mis solicitudes para estar en el lado seguro. –