private object PopulateResponse(Exception exception, HttpResponse httpResponse)
        {
            httpResponse.StatusCode = exception switch
            {
                InvalidActionException _ => StatusCodes.Status400BadRequest,
                DuplicateRecordException _ => StatusCodes.Status400BadRequest,
                RecordNotFoundException _ => StatusCodes.Status404NotFound,
                                       _ => StatusCodes.Status500InternalServerError
            };

            if (httpResponse.StatusCode == StatusCodes.Status500InternalServerError)
            {
                _logger.LogError(exception, "Unhandled exception");

                if (!_env.IsDevelopment())
                {
                    return(new
                    {
                        Message = "Unexpected error :("
                    });
                }

                while (exception.InnerException != null)
                {
                    exception = exception.InnerException;
                }
            }

            return(new
            {
                exception.Message
            });
        }
    }
Exemple #2
0
        private Response GetResponse(Exception exception)
        {
            var statusCode = exception switch
            {
                InvalidActionException _ => StatusCodes.Status400BadRequest,
                DuplicateRecordException _ => StatusCodes.Status400BadRequest,
                ForbiddenException _ => StatusCodes.Status403Forbidden,
                RecordNotFoundException _ => StatusCodes.Status404NotFound,
                _ => StatusCodes.Status500InternalServerError
            };

            if (statusCode == StatusCodes.Status500InternalServerError)
            {
                _logger.LogError(exception, "Unhandled exception");

                if (!_env.IsDevelopment())
                {
                    return(new Response(statusCode, "Unexpected error :("));
                }

                while (exception.InnerException != null)
                {
                    exception = exception.InnerException;
                }
            }

            return(new Response(statusCode, exception));
        }