TokenHubException.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. namespace OASystem.API.OAMethodLib.TokenHubAI.Models;
  2. /// <summary>
  3. /// TokenHub API 异常
  4. /// </summary>
  5. public class TokenHubException : Exception
  6. {
  7. /// <summary>
  8. /// HTTP 状态码
  9. /// </summary>
  10. public int StatusCode { get; }
  11. /// <summary>
  12. /// 错误类型
  13. /// </summary>
  14. public string? ErrorType { get; }
  15. /// <summary>
  16. /// 业务错误码
  17. /// </summary>
  18. public string? ErrorCode { get; }
  19. /// <summary>
  20. /// 错误来源
  21. /// </summary>
  22. public string? Source { get; }
  23. /// <summary>
  24. /// 请求 ID
  25. /// </summary>
  26. public string? RequestId { get; }
  27. /// <summary>
  28. /// 是否可重试
  29. /// </summary>
  30. public bool IsRetryable { get; }
  31. /// <summary>
  32. /// 原始错误对象
  33. /// </summary>
  34. public TokenHubError? ErrorDetail { get; }
  35. public TokenHubException(
  36. string message,
  37. int statusCode,
  38. TokenHubError? errorDetail = null,
  39. Exception? innerException = null)
  40. : base(message, innerException)
  41. {
  42. StatusCode = statusCode;
  43. ErrorDetail = errorDetail;
  44. if (errorDetail != null)
  45. {
  46. ErrorType = errorDetail.Type;
  47. ErrorCode = errorDetail.Code;
  48. Source = errorDetail.Source;
  49. RequestId = errorDetail.RequestId;
  50. IsRetryable = errorDetail.IsRetryable;
  51. }
  52. }
  53. public override string ToString()
  54. {
  55. var parts = new List<string>
  56. {
  57. $"StatusCode: {StatusCode}",
  58. $"Message: {Message}"
  59. };
  60. if (!string.IsNullOrEmpty(ErrorCode))
  61. parts.Add($"ErrorCode: {ErrorCode}");
  62. if (!string.IsNullOrEmpty(ErrorType))
  63. parts.Add($"ErrorType: {ErrorType}");
  64. if (!string.IsNullOrEmpty(RequestId))
  65. parts.Add($"RequestId: {RequestId}");
  66. if (IsRetryable)
  67. parts.Add("Retryable: Yes");
  68. return $"TokenHubException: {string.Join(", ", parts)}";
  69. }
  70. ///// <summary>
  71. ///// 转换为 JsonView
  72. ///// </summary>
  73. //public JsonView ToJsonView(this TokenHubException ex)
  74. //{
  75. // // 获取用户友好消息(使用已有的扩展方法)
  76. // string message = ex.GetUserFriendlyMessage();
  77. // // 构建附加数据
  78. // var data = new
  79. // {
  80. // ex.StatusCode,
  81. // ex.ErrorCode,
  82. // ex.ErrorType,
  83. // ex.RequestId,
  84. // ex.IsRetryable,
  85. // ex.Source
  86. // };
  87. // // 使用 JsonView.Fail 返回
  88. // return JsonView.Fail(message, StatusCodes.Status400BadRequest, data);
  89. //}
  90. }