的響應(以字節爲單位)的大小,有沒有辦法在的WebAPI做到不重新發明輪子?我可以很容易地獲得通過WebAPI返回的對象的大小,但當然有標題和序列化開銷。由於我們是通過帶寬利用率充電,我想知道我們的反應有多大,但似乎並沒有成爲這樣一個明顯的機制。抓拍的WebAPI方法調用
編輯 要清楚,我正在尋找一種方式來做到這一點編程,讓我可以報告,分析和預測使用,所以我沒有得到通過的法案措手不及。
的響應(以字節爲單位)的大小,有沒有辦法在的WebAPI做到不重新發明輪子?我可以很容易地獲得通過WebAPI返回的對象的大小,但當然有標題和序列化開銷。由於我們是通過帶寬利用率充電,我想知道我們的反應有多大,但似乎並沒有成爲這樣一個明顯的機制。抓拍的WebAPI方法調用
編輯 要清楚,我正在尋找一種方式來做到這一點編程,讓我可以報告,分析和預測使用,所以我沒有得到通過的法案措手不及。
這裏是一個消息處理程序,可以讓你正在尋找的大小,
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
關注,除非你真正做流內容,那麼幾乎所有的內容是由主機反正緩衝,這樣做在前面的管道一點也不會增加任何額外的開銷。
您可以使用Chrome F12 Developer Tools及其網絡Tab或Fiddler tool得到一個特定的HTTP響應的內容長度。
在Chrome瀏覽器(例如) -
在菲德勒(例如) -
UPDATE
在網頁API,你可以有一個DelegatingHandler來記錄響應,並在DelegatingHandler中你可以有這樣得到的ContentLength,在臉上就可以得到所有的報頭和響應也 -
return base.SendAsync(request, cancellationToken).ContinueWith((task) =>
{
HttpResponseMessage response = task.Result;
var contentLength = response.Content.Headers.ContentLength;
return response;
});
對不起,我不清楚。我想從ASP.NET框架內以編程方式捕獲這些內容。 –
@JeremyHolovacs,我更新了我的答案。 – ramiramilu