public static IApplicationBuilder UseApiExceptionHandler(this IApplicationBuilder builder, Action <ApiExceptionOptions> configureOptions)
        {
            var options = new ApiExceptionOptions();

            configureOptions(options);
            return(builder.UseMiddleware <ApiExceptionMiddleware>(options));
        }
        private Task HandleExceptionAsync(HttpContext context, Exception exception, ApiExceptionOptions options)
        {
            var apiError = new ApiError
            {
                Id     = Guid.NewGuid().ToString(),
                Status = (int)HttpStatusCode.InternalServerError,
                Title  = "Error occurred in the Api"
            };

            options.AddResponseDetails?.Invoke(context, exception, apiError);

            var innerMessage = GetInnerMostExceptionMessage(exception);

            var logLevel = _options.DeterminateLogLevel?.Invoke(exception) ?? LogLevel.Error;

            _logger.Log(logLevel, exception, $"{innerMessage} -- {apiError.Id}");

            var result = JsonSerializer.Serialize(apiError);

            context.Response.ContentType = "application/json";
            context.Response.StatusCode  = (int)HttpStatusCode.InternalServerError;
            return(context.Response.WriteAsync(result));
        }
 public ApiExceptionMiddleware(RequestDelegate next, ILogger <ApiExceptionMiddleware> logger, ApiExceptionOptions options)
 {
     _next    = next;
     _logger  = logger;
     _options = options;
 }