2014-02-21 30 views
2

的響應(以字節爲單位)的大小,有沒有辦法在的WebAPI做到不重新發明輪子?我可以很容易地獲得通過WebAPI返回的對象的大小,但當然有標題和序列化開銷。由於我們是通過帶寬利用率充電,我想知道我們的反應有多大,但似乎並沒有成爲這樣一個明顯的機制。抓拍的WebAPI方法調用

編輯 要清楚,我正在尋找一種方式來做到這一點編程,讓我可以報告,分析和預測使用,所以我沒有得到通過的法案措手不及。

回答

9

這裏是一個消息處理程序,可以讓你正在尋找的大小,

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關注,除非你真正做流內容,那麼幾乎所有的內容是由主機反正緩衝,這樣做在前面的管道一點也不會增加任何額外的開銷。

1

您可以使用Chrome F12 Developer Tools及其網絡Tab或Fiddler tool得到一個特定的HTTP響應的內容長度。

在Chrome瀏覽器(例如) -

enter image description here

在菲德勒(例如) -

enter image description here

UPDATE

在網頁API,你可以有一個DelegatingHandler來記錄響應,並在DelegatingHandler中你可以有這樣得到的ContentLength,在臉上就可以得到所有的報頭和響應也 -

return base.SendAsync(request, cancellationToken).ContinueWith((task) => 
{ 
     HttpResponseMessage response = task.Result; 
     var contentLength = response.Content.Headers.ContentLength; 
     return response; 
}); 
+0

對不起,我不清楚。我想從ASP.NET框架內以編程方式捕獲這些內容。 –

+0

@JeremyHolovacs,我更新了我的答案。 – ramiramilu