Dav*_*cia 37 asp.net-mvc acceptverbs http-head
当机器人使用HEAD攻击我的ASP.NET MVC站点时,我想正确支持HTTP HEAD请求.我注意到,对网站的所有HTTP HEAD请求都返回404,特别是来自http://downforeveryoneorjustme.com.哪个真烦人.希望他们像其他所有好机器人一样切换到GET.
如果我只是[AcceptVerbs(HttpVerbs.Get)]改为[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Head)]将MVC知道放弃请求的正文?
你做了什么来支持HTTP HEAD请求?(代码示例会很棒!)
a7d*_*rew 53
我在ASP.Net MVC 2项目中创建了一个简单的动作方法:
public class HomeController : Controller
{
public ActionResult TestMe()
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
然后我启动了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
Run Code Online (Sandbox Code Playgroud)
我的猜测是你在action方法中包含一个约束,这样它只会响应HTTP GET动词.如果你做这样的事情,它将适用于GET和HEAD,或者如果它没有提供任何值,你可以完全省略约束.
public class HomeController : Controller
{
[AcceptVerbs(new[] {"GET", "HEAD"})]
public ActionResult TestMe()
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
小智 27
您只需执行以下操作即可获得结果
[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Head)]
public ActionResult TestMe() =>View();
Run Code Online (Sandbox Code Playgroud)