1

[HttpGet]我有一个支持该属性的 MVC 方法如下。

[HttpGet]        
[ActionName("Index")]
public ActionResult IndexGet(string l)
{               
    return View();
}

但是,我注意到在我们的网络服务器日志文件中我们收到了一个HEAD请求,但是由于我没有[HttpHead]定义我们正在返回一个 404,这是正确的。Web 服务器日志文件条目例如

2020-05-20 00:00:51 W3SVC1 EC2AMAZ 10.0.0.206 HEAD / 443 - XXX.XXX.XXX.XXX HTTP/1.1 Mozilla/5.0+(兼容;+UptimeRobot/2.​​0;+ http://www.uptimerobot。 com/ ) - www.domainname.com 404 0 0 306 694 155

2020-05-20 00:01:13 W3SVC1 EC2AMAZ 10.0.0.206 GET / 443 - XXX.XXX.XXX.XXX HTTP/1.1 Mozilla/5.0+(兼容;+UptimeRobot/2.​​0;+ http://www.uptimerobot。 com/ ) - www.domainname.com 200 0 0 156847 674 1065

如何添加对响应的支持[HttpHead]以及我应该在响应中返回什么。我尝试同时添加[HttpHead][HttpGet]

[HttpHead]  
[HttpGet]       
[ActionName("Index")]
public ActionResult IndexGet(string l)
{               
    return View();
}

但在浏览器中获取以下内容

无法找到该资源。
说明:HTTP 404。您要查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请查看以下 URL 并确保其拼写正确。

它破坏了[HttpGet]方法。如果我删除[HttpHead]并刷新 URL[HttpGet]加载正常。

4

2 回答 2

1

HEAD 请求应该只响应标头,而不是内容。所以不应该与 GET 混合。

最简单的选择是在控制器中创建一个额外的方法来处理该 HEAD 请求:

[HttpHead]
[ActionName("Index")]
public ActionResult IsAlive()
{
   return Ok();
}
于 2020-05-20T11:40:38.083 回答
0

HttpGetorHttpHead属性表示用于限制操作方法的属性,以便该方法仅处理HTTP GET请求或HTTP HEAD 请求。请求不能同时是这两者,因此将它们组合起来会导致控制器方法永远不匹配,结果是 404 响应。

允许单个控制器方法的 GET 和 HEAD 请求的正确方法是使用:

[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Head)]
    

请参阅使用 ASP.NET MVC 响应 HTTP HEAD 请求的已接受答案

于 2022-02-01T06:06:14.017 回答