Web API保持活动标头

时间:2013-06-27 08:56:54

标签: c# .net asp.net-web-api http-headers keep-alive

我在Web API自主机上,我需要向客户端发送每个请求的keep-alive:close标头(我希望每次都有一个新连接)。如何设置此全局配置?

1 个答案:

答案 0 :(得分:2)

您可以使用HttpMessageHandler对每个请求/响应进行全局更改。您要查找的标头是Connection标头。出于某种原因,此标题的显示略有不同。您无法直接设置Connection标头,而是需要将ConnectionClose属性设置为true

创建一个这样的类:

public class CloseConnectionHeader : DelegatingHandler
    {
        protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
        {
            return base.SendAsync(request, cancellationToken).ContinueWith(t =>
                {
                    var response = t.Result;
                    response.Headers.ConnectionClose = true;
                    return response;
                });
        }
    }

并将其添加到您的messagehandler集合

     config.MessageHandlers.Add(new CloseConnectionHandler());

我很好奇你为什么要这样做。我能想象的唯一原因是你期待成千上万的并发客户,每个客户只能在短时间内提出一个请求。是这样的吗?如果没有,您可能会受到相当大的性能影响。 Http.sys堆栈将在2分钟不活动后自动关闭连接,因此它不像是在泄漏连接。