Exemple #1
0
 public static void UpdateApiErrorResponse(HttpContext context, Exception ex, Core.ErrorServerModel error)
 {
     if (ex.GetType().Name == nameof(DbException) || ex.GetType().Name == nameof(SqlException))
     {
         error.ApiDetail = "Exception was a database exception!";
     }
     //error.Links = "https://gethelpformyerror.com/";
 }
        private void HandleExceptionAsync(HttpContext context, Exception exception)
        {
            var error = new Core.ErrorServerModel
            {
                ApiErrorId = Guid.NewGuid().ToString(),
                //ApiStatus = (int)HttpStatusCode.InternalServerError,
            };

            HttpStatusCode httpStatusCode = HttpStatusCode.InternalServerError;

            switch (exception)
            {
            case BadRequestException badRequestException:
                httpStatusCode = HttpStatusCode.BadRequest;
                error.ApiTitle = $"{badRequestException.Message} {ERRORText}";
                break;

            case NotFoundException notFoundException:
                httpStatusCode = HttpStatusCode.NotFound;
                error.ApiTitle = $"{notFoundException.Message} {ERRORText}";
                break;

            case Exception ex:
                httpStatusCode = HttpStatusCode.InternalServerError;
                error.ApiTitle = $"{ex.Message} {ERRORText}";
                break;
            }
            error.ApiStatus = (int)httpStatusCode;

            _options.AddResponseDetails?.Invoke(context, exception, error);

            var innerExMessage = GetInnermostExceptionMessage(exception);
            var level          = _options.DetermineLogLevel?.Invoke(exception) ?? LogLevel.Error;

            _logger.Log(level, exception, "ApiExceptionMiddleware!!! " + innerExMessage + " -- {ErrorId}.", error.ApiErrorId);

            var result = JsonConvert.SerializeObject(error);

            context.Response.ContentType = "application/json";
            context.Response.StatusCode  = (int)httpStatusCode;
            context.Response.WriteAsync(result);
        }