Отвечать на запросы 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();