template tag net cshtml asp _layout asp.net-mvc acceptverbs http-head

asp.net-mvc - tag - razor reference



Responda a las solicitudes HTTP HEAD utilizando ASP.NET MVC (2)

Me gustaría apoyar correctamente la solicitud HTTP HEAD cuando los bots lleguen a mi sitio ASP.NET MVC usando HEAD. Me llamó la atención que todas las solicitudes de HEAD HTTP al sitio devolvieran 404, especialmente desde http://downforeveryoneorjustme.com . Lo que es realmente molesto. Ojalá cambiaran a GET como todos los otros buenos bots que hay.

Si simplemente cambio [AcceptVerbs(HttpVerbs.Get)] a [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Head)] ¿MVC sabrá que debe eliminar el cuerpo de la solicitud?

¿Qué has hecho para soportar las solicitudes HTTP HEAD? (Ejemplo de código sería genial!)


Creé un método de acción simple en un proyecto ASP.Net MVC 2:

public class HomeController : Controller { public ActionResult TestMe() { return View(); } }

Luego lancé Fiddler y construí una solicitud HTTP GET para llegar a esta URL:

http://localhost.:51149/Home/TestMe

Se devolvió el contenido de página completo esperado.

Luego, cambié la solicitud para usar un HEAD HTTP en lugar de un GET HTTP . Recibí solo la información de la cabeza esperada y ninguna información del cuerpo en la salida sin procesar.

HTTP/1.1 200 OK Server: ASP.NET Development Server/10.0.0.0 Date: Wed, 07 Jul 2010 16:58:55 GMT X-AspNet-Version: 4.0.30319 X-AspNetMvc-Version: 2.0 Cache-Control: private Content-Type: text/html; charset=utf-8 Content-Length: 1120 Connection: Close

Supongo que está incluyendo una restricción en el método de acción, de modo que solo responderá a los verbos HTTP GET . Si haces algo como esto, funcionará tanto para GET como para HEAD , o puedes omitir la restricción por completo si no proporciona ningún valor.

public class HomeController : Controller { [AcceptVerbs(new[] {"GET", "HEAD"})] public ActionResult TestMe() { return View(); } }


Puedes lograr el resultado simplemente haciendo lo siguiente

[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Head)] public ActionResult TestMe() =>View();