我想正确支持HTTP HEAD请求,当bots打我的ASP.NET MVC网站使用HEAD。引起我的注意,所有HTTP HEAD请求到网站返回404s,特别是从
http://downforeveryoneorjustme.com.这是真的很烦人。希望他们会切换到GET像所有其他好的机器人在那里。
如果我只是更改[AcceptVerbs(HttpVerbs.Get)]到[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Head)]将MVC知道删除请求的正文?
解决方法
我在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(); } }