【问题标题】:Respond to HTTP HEAD requests using ASP.NET MVC使用 ASP.NET MVC 响应 HTTP HEAD 请求
【发布时间】:2010-07-05 18:29:59
【问题描述】:

当机器人使用 HEAD 访问我的 ASP.NET MVC 站点时,我想正确支持 HTTP HEAD 请求。我注意到该站点的所有 HTTP HEAD 请求都返回 404,尤其是来自 http://downforeveryoneorjustme.com 的请求。这真的很烦人。希望他们能像其他所有优秀的机器人一样切换到 GET。

如果我只是将[AcceptVerbs(HttpVerbs.Get)] 更改为[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Head)],MVC 会知道删除请求的正文吗?

您为支持 HTTP HEAD 请求做了哪些工作? (代码示例会很棒!)

【问题讨论】:

  • MVC 框架对HEAD 没有任何特殊处理。
  • @CraigStuntz -- 不正确;至少在当前版本的 ASP.NET MVC 中,对 HEAD 请求的响应只有标头但没有正文,正如预期的那样。请参阅下面的 a7drew 的答案。

标签: asp.net-mvc acceptverbs http-head


【解决方案1】:

我在一个 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();
    }
}

【讨论】:

  • 谢谢你,很好的回答。我按照您的示例将 [HttpGet] 的所有实例替换为 [AcceptVerbs(new[] {"GET", "HEAD"})] 就在我的整个站点中。现在 twitter 和其他类似的机器人可以在我的任何内容上调用 HEAD 并接收正确的响应,而不是我抛出的错误。干杯
  • 提醒一下,不要犯我试图将 Get 和 Head 动词放在单独的操作上所做的错误,因为它会在 Head 请求上抛出 500。
  • 你也可以使用[HttpGet, HttpHead],它更容易输入。
  • 使用 [HttpGet, HttpHead] 对我不起作用(在 .NET 4.5.1 上)——他们使用 GET 或 HEAD 导致请求返回 404——而其他提供的解决方案确实可以正常工作.
  • 我使用 [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Head)] 消除了使用魔法字符串的任何潜在问题。 (另请参阅 user2101889 的回答。)
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 2019-10-20
    • 1970-01-01
    相关资源
    最近更新 更多