Отвечать на запросы HTTP HEAD, используя ASP.NET MVC

Я хотел бы правильно поддерживать запрос 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 ответа

Решение

Я создал простой метод действия в проекте 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();
    }
}

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

[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Head)]
public ActionResult TestMe() =>View();
Другие вопросы по тегам