捕获WebAPI方法调用的响应大小(以字节为单位)

Jer*_*acs 3 c# asp.net asp.net-mvc asp.net-mvc-4 asp.net-web-api

有没有办法在WebAPI中执行此操作而不重新发明轮子?我可以很容易地获得通过WebAPI返回的对象的大小,但当然有标题和序列化开销.由于我们按带宽利用率收费,我想知道我们的响应有多大,但似乎没有一个明显的机制.

编辑 要清楚,我正在寻找一种以编程方式执行此操作的方法,以便我可以报告,分析和预测使用情况,因此我不会对帐单感到惊讶.

Dar*_*ler 12

这是一个消息处理程序,可以获取您正在寻找的大小,

public class ResponseSizeHandler : DelegatingHandler
{
    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {

        var response = await base.SendAsync(request, cancellationToken);
        if (response.Content != null)
        {
           await response.Content.LoadIntoBufferAsync();
           var bodylength = response.Content.Headers.ContentLength;
           var headerlength = response.Headers.ToString().Length;
        }
        return response;
    }
}
Run Code Online (Sandbox Code Playgroud)

只需添加此处理程序的实例作为第一个消息处理程序.

config.MessageHandlers.Add(new ResponseSizeHandler());
Run Code Online (Sandbox Code Playgroud)

不要担心LoadIntoBufferAsync,除非你实际上做流媒体内容,否则几乎所有内容都由主机缓冲,所以在管道中稍早做一下就不会增加额外的开销.