Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 在ASP.Net核心Web服务中,如何测量通过网络发送响应所需的时间?_Asp.net Core - Fatal编程技术网

Asp.net core 在ASP.Net核心Web服务中,如何测量通过网络发送响应所需的时间?

Asp.net core 在ASP.Net核心Web服务中,如何测量通过网络发送响应所需的时间?,asp.net-core,Asp.net Core,我有一个web服务端点(get方法),它返回相当大的JSON数据块。我想测量通过网络传输到客户端所需的时间量。我不想包括组装数据或将其序列化为JSON所需的时间,只想包括网络传输时间。我认为我不能在get方法本身中这样做,因为它只返回数据,传输必须在请求完成后的某个时间发生。我从get方法返回如下响应:returnok(content)其中content是.Net对象,因此我让ASP.Net内核处理JSON的序列化。我认为您可以使用。您可以在OnResultExecuting中启动秒表,该秒表在

我有一个web服务端点(get方法),它返回相当大的JSON数据块。我想测量通过网络传输到客户端所需的时间量。我不想包括组装数据或将其序列化为JSON所需的时间,只想包括网络传输时间。我认为我不能在get方法本身中这样做,因为它只返回数据,传输必须在请求完成后的某个时间发生。我从get方法返回如下响应:
returnok(content)
其中content是.Net对象,因此我让ASP.Net内核处理JSON的序列化。

我认为您可以使用。您可以在
OnResultExecuting
中启动
秒表
,该秒表在操作方法的结果即将发送时执行。然后停止
OnResultExecuted
中的
秒表
,该秒表在结果发送到客户端时执行。然后记录
elapsedmillishes

public class ResponseTimeAttribute : ResultFilterAttribute
{
    private readonly ILogger<ResponseTimeAttribute> _logger;
    private static Stopwatch _stopwatch;

    public ResponseTimeAttribute(ILogger<ResponseTimeAttribute> logger)
    {
        _stopwatch = new Stopwatch();
        _logger = logger;
    }

    public override void OnResultExecuting(ResultExecutingContext context)
    {
        _stopwatch.Start();
    }

    public override void OnResultExecuted(ResultExecutedContext context)
    {
        _stopwatch.Stop();
        _logger.LogInformation($"Time took {_stopwatch.ElapsedMilliseconds}");
    }
}

我希望这能有所帮助。

OP要求的是发送时间,而不是执行时间,那么,这如何衡量通过网络将其传输到客户端所需的时间呢?
OnResultExecuting
OnResultExecuted
的ResultFilterAttribute在操作方法成功完成且结果即将发送到客户端且已发送到客户端时执行分别地所以这不是整个行动的执行时间。正如问题中提到的,我不想包括组装数据或将其序列化为JSON所需的时间。另一种选择是使用
中间件
,但这将包括构建和组装数据的时间以及其他中间件花费的时间
[TypeFilter(typeof(ResponseTimeAttribute))]
public IActionResult YourAction()
{
    return Ok(content);
}