¿Cómo sabe ASP.NET si una request es AJAX o no?

Estoy escribiendo una aplicación MVC y me sorprendió saber que podía hacer un Request.isAJAXRequest () en mi controller y devolver un JSONResult si era AJAX, o devolver una vista regular de HTML Razor si no lo era.

Esto es increíblemente útil, pero me pregunto cómo funciona esto en realidad. ¿Hay algo en el encabezado que lo designe como AJAX?

Aquí está el encabezado de request de un POSTE de AJAX que extraje de las herramientas de desarrollo de IE. enter image description here

Sí, el encabezado llamado X-Requested-With le dice al server que se utilizó XMLHttpRequest para realizar la request (es decir, Ajax).

es X-Requerido-Con encabezado en los encabezados de request .

y debido a que el encabezado se puede eliminar o cambiar , no es una solución completa y garantizada para detectar llamadas ajax .

actualizar:

en su situación (devuelva el formatting adecuado al cliente), otra forma podría ser marcar Aceptar encabezado. podría ser json, xml, html u otras cosas . en function de eso, puede decidir qué devolver.