当机器人使用HEAD攻击我的ASP.NET MVC站点时,我想正确支持HTTP HEAD请求.我注意到,对网站的所有HTTP HEAD请求都返回404,特别是来自http://downforeveryoneorjustme.com.哪个真烦人.希望他们像其他所有好机器人一样切换到GET.
如果我只是[AcceptVerbs(HttpVerbs.Get)]
改为[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Head)]
将MVC知道放弃请求的正文?
你做了什么来支持HTTP HEAD请求?(代码示例会很棒!)
我在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
我的猜测是你在action方法中包含一个约束,这样它只会响应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();