Я думаю, вы можете использовать Фильтры результатов .Вы можете запустить StopWatch
в OnResultExecuting
, который выполняется, когда результат метода действия вот-вот будет отправлен.Затем остановите StopWatch
в OnResultExecuted
, который выполняется, когда результат отправляется клиенту.Затем зарегистрируйте ElapsedMilliseconds
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}");
}
}
. Чтобы использовать вышеупомянутый фильтр, вам нужно использовать атрибут TypeFilter для разрешения зависимостей через DI.В данном случае это ILogger<ResponseTimeAttribute>
.Итак, к вашему методу действий добавьте, как показано ниже:
[TypeFilter(typeof(ResponseTimeAttribute))]
public IActionResult YourAction()
{
return Ok(content);
}
Надеюсь, это поможет.