41 votes

Répondre aux demandes HTTP HEAD en utilisant ASP.NET MVC

J'aimerais prendre correctement en charge la requête HTTP HEAD lorsque des robots attaquent mon site ASP.NET MVC en utilisant HEAD. Il a été porté à mon attention que toutes les requêtes HTTP HEAD sur le site retournaient 404, en particulier de la part de http://downforeveryoneorjustme.com . Ce qui est vraiment ennuyeux. J'aimerais qu'ils passent à GET comme tous les autres bons robots qui existent.

Si je change juste [AcceptVerbs(HttpVerbs.Get)] a [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Head)] MVC saura-t-il laisser tomber le corps de la requête ?

Qu'avez-vous fait pour prendre en charge les demandes HTTP HEAD ? (Un exemple de code serait super !)

58voto

a7drew Points 4005

J'ai créé une méthode d'action simple dans un projet ASP.Net MVC 2 :

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

Ensuite, j'ai lancé Fiddler et j'ai construit un HTTP GET pour atteindre cette URL :

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

Le contenu de la page complète attendu a été renvoyé.

Ensuite, j'ai modifié la requête pour utiliser un HTTP HEAD au lieu d'un HTTP GET . Je n'ai reçu que l'information attendue sur la tête et aucune information sur le corps dans la sortie brute.

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

Je pense que vous avez inclus une contrainte sur la méthode d'action de sorte qu'elle ne réponde qu'à HTTP GET des verbes. Si vous faites quelque chose comme ça, ça marchera pour les deux GET y TETE Vous pouvez également omettre complètement la contrainte si elle n'a aucune valeur.

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

29voto

user2101889 Points 61

Vous pouvez obtenir ce résultat en faisant simplement ce qui suit

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X