Пример #1
0
 public ErrorHandlingModule(
     IErrorHandlingConfiguration errorHandlingConfiguration,
     ExceptionStatusCodeMapper exceptionStatusCodeMapper,
     ILoggerFactory loggerFactory
     )
 {
     _errorHandlingConfiguration = errorHandlingConfiguration;
     _exceptionStatusCodeMapper  = exceptionStatusCodeMapper;
     _loggerFactory = loggerFactory;
 }
Пример #2
0
        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);
                }
            });
        }
Пример #3
0
        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));
        }