Ответ на запросы 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? (Пример кода будет замечательным!)

Ответ 1

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

Ответ 2

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

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