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; }