ActionFilter in high requests is slow?

59 Views Asked by At

I have an application with high incoming requests in each millisecond. for measuring the response time of requests, I use ActionFilter. but it seems to me, it takes a lot time to get to EndRequest in OnActionExecuted after doing previous businesses. this is the ActionFilter code:

 public class LoggerActionFilter : IActionFilter
     {
     private readonly ILogger<LoggerActionFilter> _logger;

public LoggerActionFilter(ILogger<LoggerActionFilter> logger, IRequestContext 
   requestContext)
{
    _logger = logger;
 }

public void OnActionExecuted(ActionExecutedContext context)
{
    var request = context.HttpContext.Request;
    var response = context.HttpContext.Response;

    var info = new
    {
        timeTaken = GetTimeTaken().TotalMilliseconds,
        contentType = request.ContentType,
        status = response.StatusCode,
        url = request.Path.Value,
        body = context.Result
    };

    _logger.LogDebug(LogEvents.EndRequest, "{@info}", info);
    StopWatch();
}

public void OnActionExecuting(ActionExecutingContext context)
{
    StartWatch();
    var request = context.HttpContext.Request;

    var info = new
    {
        contentType = request.ContentType,
        url = request.Path.Value,
        method = request.Method,
        body = context.ActionDescriptor?.Parameters?.ToDictionary(x => x.Name, x => 
      context.ActionArguments[x.Name])
    };

    _logger.LogDebug(LogEvents.StartRequest, "{@info}", info);
}

}

because ActionFilter is sync,the response time is high after requests getting to OnActionExecuted?

0

There are 0 best solutions below