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

标签 c# asp.net asp.net-mvc asp.net-mvc-4 asp.net-web-api

有没有办法在 WebAPI 中做到这一点而无需重新发明轮子?我可以轻松获得通过 WebAPI 返回的对象的大小,但是当然会有 header 和序列化开销。由于我们按带宽利用率收费,我想知道我们的响应有多大,但似乎没有明显的机制来这样做。

编辑 明确地说,我正在寻找一种以编程方式执行此操作的方法,以便我可以报告、分析和预测使用情况,这样我就不会被账单吓到。

最佳答案

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

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;
    }
}

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

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

不要担心 LoadIntoBufferAsync,除非您实际执行流式传输内容,否则几乎所有内容都由主机缓冲,所以在管道中稍早执行不会增加任何额外的内容开销。

关于c# - 捕获 WebAPI 方法调用的响应大小(以字节为单位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21934933/

相关文章:

asp.net - @model 到底做了什么?

jquery - 发布项目后对话框未在服务器中加载 View

c# - 在更改新的随机速度之前如何等待秒数?

c# - 在 C#/.NET 中运行应用程序之前检查 DLL 是否真实/正确

c# - Entity Framework 核心 : sanity-check if database and model are in sync

asp.net - 类型或命名空间名称 'CrystalReportViewer' 在命名空间 'CrystalDecisions.Web' 中不存在(是否缺少程序集引用?)

c# - 如何保证同一时间只有一个用户可以执行一段代码

C#、visual studio 代码、调试器、处理 'configurationDone' 请求时出错。未知错误 : 0x89720010,

javascript - 带有 ASP.NET 的纯 Javascript 应用程序

asp.net-mvc - iis7 asp.net mvc webapi重写