Отвечать на запросы HTTP HEAD, используя ASP.NET MVC - PullRequest
36 голосов
/ 05 июля 2010

Я бы хотел правильно поддерживать запрос HTTP HEAD, когда боты попадают на мой сайт ASP.NET MVC с помощью HEAD. До моего сведения дошло, что все запросы HTTP HEAD к сайту возвращали 404, особенно из http://downforeveryoneorjustme.com., что действительно раздражает. Хотелось бы, чтобы они переключились на GET, как все остальные хорошие боты.

Если я просто изменю [AcceptVerbs(HttpVerbs.Get)] на [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Head)], узнает ли MVC, что нужно отбросить тело запроса?

Что вы сделали для поддержки запросов HTTP HEAD? (Пример кода был бы отличным!)

Ответы [ 2 ]

53 голосов
/ 07 июля 2010

Я создал простой метод действия в проекте ASP.Net MVC 2:

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

Затем я запустил Fiddler и создал запрос HTTP GET , чтобы перейти по этому URL:

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

Ожидаемый полный контент страницы был возвращен.

Затем я изменил запрос на использование HTTP HEAD вместо HTTP GET . Я получил только ожидаемую информацию о голове и информацию о теле в исходном виде.

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

Я предполагаю, что вы включили ограничение на метод действия, так что он будет отвечать только на глаголы HTTP GET . Если вы сделаете что-то подобное, оно будет работать как для GET , так и для HEAD , или вы можете полностью опустить ограничение, если оно не дает значения.

public class HomeController : Controller
{
    [AcceptVerbs(new[] {"GET", "HEAD"})]
    public ActionResult TestMe()
    {
        return View();
    }
}
26 голосов
/ 23 февраля 2013

Вы можете достичь результата, просто выполнив

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