public EmployeeController() { _apiRequestIdCacheManager = IoC.Resolve <IApiRequestIdCacheManager>(); _apiCacheManager = IoC.Resolve <IApiCacheManager>(); _employeeManager = IoC.Resolve <IEmployeeManager>(); _apiLogManager = IoC.Resolve <IApiLogManager>(); _employeeApiValidationManager = IoC.Resolve <IEmployeeApiValidationManager>(); }
public ApiLogController(IApiLogManager apiLogManager) { _apiLogManager = apiLogManager; }
public async Task Invoke(HttpContext httpContext, IApiLogManager apiLogManager, ILogger <APIResponseRequestLoggingMiddleware> logger, UserManager <ApplicationUser> userManager) { _logger = logger; _apiLogManager = apiLogManager; try { var request = httpContext.Request; if (IsSwagger(httpContext) || !request.Path.StartsWithSegments(new PathString("/api"))) { await _next(httpContext); } else { Stopwatch stopWatch = Stopwatch.StartNew(); var requestTime = DateTime.UtcNow; var formattedRequest = await FormatRequest(request); var originalBodyStream = httpContext.Response.Body; using (var responseBody = new MemoryStream()) { httpContext.Response.Body = responseBody; try { var response = httpContext.Response; response.Body = responseBody; await _next.Invoke(httpContext); string responseBodyContent = null; if (httpContext.Response.StatusCode == Status200OK) { responseBodyContent = await FormatResponse(response); await HandleSuccessRequestAsync(httpContext, responseBodyContent, Status200OK); } else { await HandleNotSuccessRequestAsync(httpContext, httpContext.Response.StatusCode); } stopWatch.Stop(); #region Log Request / Response //Search the Ignore paths from appsettings to ignore the loggin of certian api paths if (_enableAPILogging && (_ignorePaths.Any(e => !request.Path.StartsWithSegments(new PathString(e.ToLower()))))) { try { await responseBody.CopyToAsync(originalBodyStream); //User id = "sub" y default ApplicationUser user = httpContext.User.Identity.IsAuthenticated ? await userManager.FindByIdAsync(httpContext.User.Claims.Where(c => c.Type == JwtClaimTypes.Subject).First().Value) : null; await SafeLog(requestTime, stopWatch.ElapsedMilliseconds, response.StatusCode, request.Method, request.Path, request.QueryString.ToString(), formattedRequest, responseBodyContent, httpContext.Connection.RemoteIpAddress.ToString(), user ); } catch (Exception ex) { _logger.LogWarning("An Inner Middleware exception occurred on SafeLog: " + ex.Message); } } #endregion } catch (System.Exception ex) { _logger.LogWarning("An Inner Middleware exception occurred: " + ex.Message); await HandleExceptionAsync(httpContext, ex); } finally { responseBody.Seek(0, SeekOrigin.Begin); await responseBody.CopyToAsync(originalBodyStream); } } } } catch (Exception ex) { // We can't do anything if the response has already started, just abort. if (httpContext.Response.HasStarted) { _logger.LogWarning("A Middleware exception occurred, but response has already started!"); throw; } await HandleExceptionAsync(httpContext, ex); throw; } }