Rispondere alle richieste HEAD HTTP utilizzando ASP.NET MVC
-
02-10-2019 - |
Domanda
Mi piacerebbe sostenere correttamente la richiesta HEAD HTTP quando i bot ha colpito il mio sito ASP.NET MVC utilizzando TESTA. E 'stato portato alla mia attenzione che tutte le richieste HTTP HEAD al sito tornavano 404, in particolare da http://downforeveryoneorjustme.com . Il che è davvero fastidioso. Sarebbe meglio se passare a GET come tutti gli altri bot buoni là fuori.
Se mi limito a cambiare [AcceptVerbs(HttpVerbs.Get)]
per [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Head)]
volontà MVC sapere di abbandonare il corpo della richiesta?
Che cosa avete fatto per le richieste HEAD supporto HTTP? (Esempio di codice sarebbe grande!)
Soluzione
Ho creato un metodo semplice azione in un progetto ASP.Net MVC 2:
public class HomeController : Controller
{
public ActionResult TestMe()
{
return View();
}
}
Poi ho lanciato Fiddler e costruito un HTTP GET richiesta per colpire questo URL:
http://localhost.:51149/Home/TestMe
Il contenuto della pagina intera previsto è stato restituito.
Poi, ho cambiato la richiesta di utilizzare un HTTP HEAD al posto di un HTTP GET . Ho ricevuto solo le informazioni di testa previsto e nessuna info corpo in uscita prima.
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
La mia ipotesi è che si sta includendo un vincolo sul metodo di azione in modo tale che sarà solo rispondere alle HTTP GET verbi. Se si fa qualcosa di simile, funzionerà sia per e HEAD , oppure è possibile omettere il vincolo del tutto se fornisce alcun valore.
public class HomeController : Controller
{
[AcceptVerbs(new[] {"GET", "HEAD"})]
public ActionResult TestMe()
{
return View();
}
}
Altri suggerimenti
È possibile raggiungere il risultato semplicemente facendo seguito
[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Head)]
public ActionResult TestMe() =>View();