public ErrorHandlingModule( IErrorHandlingConfiguration errorHandlingConfiguration, ExceptionStatusCodeMapper exceptionStatusCodeMapper, ILoggerFactory loggerFactory ) { _errorHandlingConfiguration = errorHandlingConfiguration; _exceptionStatusCodeMapper = exceptionStatusCodeMapper; _loggerFactory = loggerFactory; }
public static void UseRestErrorHandling( this IMiddlewareSupport middlewareSupport, IErrorHandlingConfiguration configuration, ExceptionStatusCodeMapper mapper, ILogger <ErrorHandlingModule> logger) { middlewareSupport.Use(async(context, next) => { try { await next(context); } catch (Exception e) { logger.LogError(e, $"Error during processing request: {context.Request.Method} {context.Request.Url}"); var mimeTypes = context.Request.GetResponseMimeTypesPriority(new[] { MediaTypeNames.Application.Json, MediaTypeNames.Text.Html }); if (mimeTypes != null) { switch (mimeTypes.FirstOrDefault()) { case MediaTypeNames.Application.Json: await context.Response.SetJsonResponse(e, mapper, configuration); return; case MediaTypeNames.Text.Html: await context.Response.SetHtmlResponse(e, configuration); return; } } await context.Response.SetHtmlResponse(e, configuration); } }); }
public static async Task SetJsonResponse( this IResponse response, Exception e, ExceptionStatusCodeMapper exceptionStatusCodesMapper, IErrorHandlingConfiguration configuration) { var responseStatusCode = exceptionStatusCodesMapper.GetStatusCode(e); response.StatusCode = responseStatusCode; response.SetHeader("Content-Type", MediaTypeNames.Application.Json); var resp = new ErrorResponse { Status = (int)responseStatusCode, Error = SomethingWentWrong }; if (configuration.ShowCallStack) { resp.Exception = e; } await response.WriteBodyAsync(Body(resp)); }