当前位置:  开发笔记 > 后端 > 正文

使用ASP.NET MVC响应HTTP HEAD请求

如何解决《使用ASP.NETMVC响应HTTPHEAD请求》经验,为你挑选了2个好方法。

当机器人使用HEAD攻击我的ASP.NET MVC站点时,我想正确支持HTTP HEAD请求.我注意到,对网站的所有HTTP HEAD请求都返回404,特别是来自http://downforeveryoneorjustme.com.哪个真烦人.希望他们像其他所有好机器人一样切换到GET.

如果我只是[AcceptVerbs(HttpVerbs.Get)]改为[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Head)]将MVC知道放弃请求的正文?

你做了什么来支持HTTP HEAD请求?(代码示例会很棒!)



1> a7drew..:

我在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动词.如果你做这样的事情,它将适用于GETHEAD,或者如果它没有提供任何值,你可以完全省略约束.

public class HomeController : Controller
{
    [AcceptVerbs(new[] {"GET", "HEAD"})]
    public ActionResult TestMe()
    {
        return View();
    }
}


使用[HttpGet,HttpHead]对我不起作用(在.NET 4.5.1上) - 它们使用GET或HEAD返回404引发请求 - 而另一个提供的解决方案确实工作正常.
您也可以使用[HttpGet,HttpHead],它更容易输入.

2> 小智..:

您只需执行以下操作即可获得结果

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

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有