using Microsoft.AspNetCore.Http; using System.IO; using System.Threading.Tasks; namespace HRD.WebApi.DAL.Middleware { /// /// Gets the current API resource name from HTTP context /// /// The HTTP context /// The current resource name if available, otherwise an empty string public class WebApiMiddleware { private readonly RequestDelegate _next; public WebApiMiddleware(RequestDelegate next) { _next = next; } public async Task InvokeAsync(HttpContext httpContext) { try { var loglevel = WebApiConfig.GetMonitoringWebRequestLevel(httpContext.Request.Method, httpContext.Request.Path.Value); if (loglevel == AppLogger.EN_LoggingLevel.Info || loglevel == AppLogger.EN_LoggingLevel.Warn || loglevel == AppLogger.EN_LoggingLevel.Error ) { var requestReader = new StreamReader(httpContext.Request.Body); var requestContent = await requestReader.ReadToEndAsync(); if (string.IsNullOrEmpty(requestContent)) { requestContent = $"{httpContext.Request.Method} {httpContext.Request.Path.Value}"; } AppLogger.ILoggerManager logger = new AppLogger.LoggerManager(); if (loglevel == AppLogger.EN_LoggingLevel.Info) { logger.LogInfo(requestContent); } if (loglevel == AppLogger.EN_LoggingLevel.Warn) { logger.LogWarn(requestContent); } if (loglevel == AppLogger.EN_LoggingLevel.Error) { logger.LogError(requestContent); } } } catch (System.Exception) { //throw; } await _next(httpContext).ConfigureAwait(false); } } }