private void HandleException( Exception ex, Nullable <EventId> eventId, HttpContext context, D dbContext, IOptions <NKitHttpExceptionHandlerMiddlewareSettings> middlewareSettings, ILogger <NKitHttpExceptionHandlerMiddleware <D> > logger, NKitEmailClientService emailClient) { if (context.Response.HasStarted) { logger.LogWarning(RESPONSE_STARTED_LOG_ERROR_MESSAGE); throw ex; } string message = ExceptionHandler.GetCompleteExceptionMessage(ex, middlewareSettings.Value.IncludeExceptionStackTraceInLoggerEntry); if (eventId.HasValue) { logger.Log(LogLevel.Error, eventId.Value, ex, message); } else { logger.Log(LogLevel.Error, ex, message); } dbContext.LogExceptionToNKitLogEntry(ex, eventId, middlewareSettings.Value.IncludeExceptionStackTraceInDatabaseNKitLogEntry); if (middlewareSettings.Value.SendEmailOnException) { emailClient.SendExceptionEmailNotification(ex, out string errorMessage, out string emailLogMessageText, middlewareSettings.Value.AppendHostNameToExceptionEmails, null); } }
public NKitWebApiControllerCrud( D dbContext, IHttpContextAccessor httpContextAccessor, IOptions <NKitGeneralSettings> generalOptions, IOptions <NKitWebApiControllerSettings> webApiControllerOptions, IOptions <NKitDbContextSettings> databaseOptions, IOptions <NKitEmailClientServiceSettings> emailOptions, IOptions <NKitLoggingSettings> loggingOptions, IOptions <NKitWebApiClientSettings> webApiClientOptions, NKitEmailClientService emailClientService, ILogger logger) : base(dbContext, httpContextAccessor, generalOptions, webApiControllerOptions, databaseOptions, emailOptions, loggingOptions, webApiClientOptions, emailClientService, logger) { }
public async Task Invoke( HttpContext context, D dbContext, IOptions <NKitHttpExceptionHandlerMiddlewareSettings> middlewareSettings, ILogger <NKitHttpExceptionHandlerMiddleware <D> > logger, NKitEmailClientService emailClient) { try { await _next(context); } catch (NKitHttpStatusCodeException ex) { HandleException(ex, ex.EventId, context, dbContext, middlewareSettings, logger, emailClient); NKitHttpExceptionResponse response = new NKitHttpExceptionResponse(ex, middlewareSettings.Value.IncludeStackTraceInExceptionResponse); string responseText = response.GetResponseText(middlewareSettings.Value.SerializerType, middlewareSettings.Value.ResponseContentType); context.Response.Clear(); context.Response.StatusCode = (int)ex.StatusCode; context.Response.ContentType = response.ContentType; await context.Response.WriteAsync(responseText); return; } catch (Exception ex) { HandleException(ex, null, context, dbContext, middlewareSettings, logger, emailClient); int httpStatusCode = (int)HttpStatusCode.InternalServerError; NKitHttpExceptionResponse response = new NKitHttpExceptionResponse(ex, httpStatusCode, null, null, middlewareSettings.Value.IncludeStackTraceInExceptionResponse); string responseText = response.GetResponseText(middlewareSettings.Value.SerializerType, middlewareSettings.Value.ResponseContentType); context.Response.Clear(); context.Response.StatusCode = httpStatusCode; context.Response.ContentType = response.ContentType; await context.Response.WriteAsync(responseText); return; } finally { if (dbContext != null) { dbContext.Dispose(); } } }
public NKitWebApiController( D dbContext, IHttpContextAccessor httpContextAccessor, IOptions <NKitGeneralSettings> generalOptions, IOptions <NKitWebApiControllerSettings> webApiControllerOptions, IOptions <NKitDbContextSettings> databaseOptions, IOptions <NKitEmailClientServiceSettings> emailOptions, IOptions <NKitLoggingSettings> loggingOptions, IOptions <NKitWebApiClientSettings> webApiClientOptions, NKitEmailClientService emailClientService, ILogger logger) { DataValidator.ValidateObjectNotNull(dbContext, nameof(dbContext), nameof(NKitWebApiController <D>)); DataValidator.ValidateObjectNotNull(httpContextAccessor, nameof(httpContextAccessor), nameof(NKitWebApiController <D>)); DataValidator.ValidateObjectNotNull(generalOptions, nameof(generalOptions), nameof(NKitWebApiController <D>)); DataValidator.ValidateObjectNotNull(webApiControllerOptions, nameof(webApiControllerOptions), nameof(NKitWebApiController <D>)); DataValidator.ValidateObjectNotNull(databaseOptions, nameof(databaseOptions), nameof(NKitWebApiController <D>)); DataValidator.ValidateObjectNotNull(emailOptions, nameof(emailOptions), nameof(NKitWebApiController <D>)); DataValidator.ValidateObjectNotNull(loggingOptions, nameof(loggingOptions), nameof(NKitWebApiController <D>)); DataValidator.ValidateObjectNotNull(webApiClientOptions, nameof(webApiClientOptions), nameof(NKitWebApiController <D>)); _serviceInstanceId = Guid.NewGuid(); _dbContext = dbContext; _httpContextAccessor = httpContextAccessor; _generalSettings = generalOptions.Value; _webApiControllerSettings = webApiControllerOptions.Value; _dbRepositorySettings = databaseOptions.Value; _emailSettings = emailOptions.Value; _loggingSettings = loggingOptions.Value; _webApiClientSettings = webApiClientOptions.Value; _emailClientService = emailClientService; _logger = logger; }