C# 如何使用HttpClient类c获取到第一个字节的时间#

C# 如何使用HttpClient类c获取到第一个字节的时间#,c#,http,testing,httpclient,metrics,C#,Http,Testing,Httpclient,Metrics,下面是我当前用来调用api的代码,api是传递给函数的字符串。httpClient的设置是在方法之外预先完成的 HttpResponseMessage response = await httpClient.GetAsync(api); String strResp = await response.Content.ReadAsStringAsync(); httpClient.DefaultRequestHeaders.Accept.Clear(); 是否有一种方法可以使用此代码跟踪第一字

下面是我当前用来调用api的代码,
api
是传递给函数的字符串。httpClient的设置是在方法之外预先完成的

HttpResponseMessage response = await httpClient.GetAsync(api);
String strResp = await response.Content.ReadAsStringAsync();

httpClient.DefaultRequestHeaders.Accept.Clear();

是否有一种方法可以使用此代码跟踪第一字节时间(TTFB)之类的指标,或者我必须走另一条路线?

您应该能够使用
HttpClient.GetAsync(string requestUri,HttpCompletionOption completionOption)
方法和
HttpCompleteOption.ResponseHeadersRead
。读取标头后,应立即返回HttpResponseMessage(不完全是TTFB-“读取第一个字节的时间”,而是TTHR-“读取标头的时间”)

然后,您可以使用stopwached测量此时间:

sw = new Stopwatch();
sw.Start();
HttpResponseMessage response = await httpClient.GetAsync(api);
sw.Stop();
Console.WriteLine("TTFB: " + sw.EleapsedMilliseconds)
String strResp = await response.Content.ReadAsStringAsync();
但由于此代码的并行性,这也是非常不可靠的


有人建议使用
WebClient
及其
DownloadProgressChanged
与“秒表”结合使用。

最后通过Telerik使用FiddlerCore获得TTFB和其他有用指标的加载

你的意思是你需要把
ReadAsStringAsync
代码保存在那里吗?我想问的是,有没有可能(如果有)用我当前的代码获得像TTFB这样的指标。如果不可能,那么我会要求另一种方法来进行api调用,以便跟踪TTFB等。它必须是TTFB,还是TTLB也足够?嗯。您可以控制
HttpClient
的构造吗?如果是这样的话,您可能会创建一个带有自定义
HttpMessageHandler
的,这可能会有帮助…我确实可以控制该构造。这个类对我来说是新的(和本课程的其他部分一样),我会看看它是否能满足我的需要。我对这些请求还很陌生。你能解释一下TTHR和TTFB的区别吗?只是TTHR是头中包含的第一个字节加上其他几个字节吗?TTFB是发送请求和接收第一个响应字节之间的时间,而TTLB是发送请求和接收最后一个响应字节之间的时间。命名TTHR应该更像是一个“笑话”,这是我自己介绍的:P它意味着从发送请求到接收完整标头之间的时间。酷,那么标头只是响应状态和所有其他元信息,而不是api返回的实际内容?是的。标题中所有可能字段的名称。