public AppException(ApiResultStatusCodeEnum statusCodeEnum, string?message, HttpStatusCode httpStatusCode, Exception?exception, object?additionalData) : base(message, exception) { ApiStatusCodeEnum = statusCodeEnum; HttpStatusCode = httpStatusCode; AdditionalData = additionalData; }
public async System.Threading.Tasks.Task Invoke(HttpContext context) { string? message = null; HttpStatusCode httpStatusCode = HttpStatusCode.InternalServerError; ApiResultStatusCodeEnum apiStatusCode = ApiResultStatusCodeEnum.ServerError; try { await _next(context); } catch (AppException exception) { _logger.LogError(exception, exception.Message); httpStatusCode = exception.HttpStatusCode; apiStatusCode = exception.ApiStatusCodeEnum; if (_env.IsDevelopment()) { var dic = new Dictionary <string, string?> { ["Exception"] = exception.Message, ["StackTrace"] = exception.StackTrace, }; if (exception.InnerException != null) { dic.Add("InnerException.Exception", exception.InnerException.Message); dic.Add("InnerException.StackTrace", exception.InnerException.StackTrace); } if (exception.AdditionalData != null) { dic.Add("AdditionalData", JsonConvert.SerializeObject(exception.AdditionalData)); } message = JsonConvert.SerializeObject(dic); } else { message = exception.Message; } await WriteToResponseAsync(); } catch (SecurityTokenExpiredException exception) { _logger.LogError(exception, exception.Message); SetUnAuthorizeResponse(exception); await WriteToResponseAsync(); } catch (UnauthorizedAccessException exception) { _logger.LogError(exception, exception.Message); SetUnAuthorizeResponse(exception); await WriteToResponseAsync(); } catch (Exception exception) { _logger.LogError(exception, exception.Message); if (_env.IsDevelopment()) { var dic = new Dictionary <string, string?> { ["Exception"] = exception.Message, ["StackTrace"] = exception.StackTrace, }; message = dic.SerializeToJson(); } await WriteToResponseAsync(); } async System.Threading.Tasks.Task WriteToResponseAsync() { if (context.Response.HasStarted) { throw new InvalidOperationException("The response has already started, the http status code middleware will not be executed."); } var result = new ApiResult(false, apiStatusCode, message); var json = JsonConvert.SerializeObject(result); context.Response.StatusCode = (int)httpStatusCode; context.Response.ContentType = "application/json"; await context.Response.WriteAsync(json); } void SetUnAuthorizeResponse(Exception exception) { httpStatusCode = HttpStatusCode.Unauthorized; apiStatusCode = ApiResultStatusCodeEnum.UnAuthorized; if (_env.IsDevelopment()) { var dic = new Dictionary <string, string?> { ["Exception"] = exception.Message, ["StackTrace"] = exception.StackTrace }; if (exception is SecurityTokenExpiredException tokenException) { dic.Add("Expires", tokenException.Expires.ToString(CultureInfo.InvariantCulture)); } message = JsonConvert.SerializeObject(dic); } } }
public AppException(ApiResultStatusCodeEnum statusCodeEnum, string message, Exception exception, object additionalData) : this(statusCodeEnum, message, HttpStatusCode.InternalServerError, exception, additionalData) { }
public AppException(ApiResultStatusCodeEnum statusCodeEnum, string?message, HttpStatusCode httpStatusCode, Exception?exception) : this(statusCodeEnum, message, httpStatusCode, exception, null) { }
public AppException(ApiResultStatusCodeEnum statusCodeEnum, string message, Exception exception) : this(statusCodeEnum, message, HttpStatusCode.InternalServerError, exception) { }
public AppException(ApiResultStatusCodeEnum statusCodeEnum, string?message, HttpStatusCode httpStatusCode, object additionalData) : this(statusCodeEnum, message, httpStatusCode, null, additionalData) { }
public AppException(ApiResultStatusCodeEnum statusCodeEnum, object additionalData) : this(statusCodeEnum, null, additionalData) { }
public AppException(ApiResultStatusCodeEnum statusCodeEnum) : this(statusCodeEnum, null) { }
public ApiResult(bool isSuccess, ApiResultStatusCodeEnum customStatusCode, string?message = null) { IsSuccess = isSuccess; CustomStatusCode = customStatusCode; Message = message ?? customStatusCode.ToDisplayName() !; }