Web API - 处理 HEAD 请求并指定自定义内容长度

Hen*_*use 2 asp.net asp.net-web-api

我有通过 GET-Requests 的 API-Controller 服务文件。我正在使用 PushStreamContentResponse 并且效果很好。

我还可以在响应对象上设置 Content-Length-Header。

现在我也想支持 HEAD-Requests。我试过http://www.strathweb.com/2013/03/adding-http-head-support-to-asp-net-web-api/虽然这可能有效,但我需要一个我不知道的解决方案不需要实际处理请求:检索文件并流式传输它很昂贵,但获取元数据(长度等)实际上是无操作的。

但是,当我尝试设置 Content-Length 标头时,它将被 0 覆盖。

我添加了请求跟踪,我看到我的处理程序返回的消息显示有正确的 URL、Content-Disposition 和 Content-Length。

我还尝试使用自定义 HttpResponse 并实现 TryComputeLength。虽然确实调用了此方法,但结果在管道中的某个点被丢弃。

有什么方法可以使用 Web API 支持此功能吗?

Obi*_*Obi 5

虽然这可能是 2015 年的问题,但今天(2017 年以后),您可以这样做

[RoutePrefix("api/webhooks")]
public class WebhooksController : ApiController
{
    [HttpHead]
    [Route("survey-monkey")]
    public IHttpActionResult Head()
    {
        return Ok();
    }

    [HttpPost]
    [Route("survey-monkey")]
    public IHttpActionResult Post(object data)
    {
        return Ok();
    }
}
Run Code Online (Sandbox Code Playgroud)

HEAD api/webhooks/survey-monkeyPOST api/webhooks/survey-monkey工作就好了。(这是我刚刚为实现 SurveyMonkey 的 webhooks 所做的存根)