namespace OASystem.API.OAMethodLib.TokenHubAI.Models; /// /// TokenHub API 异常 /// public class TokenHubException : Exception { /// /// HTTP 状态码 /// public int StatusCode { get; } /// /// 错误类型 /// public string? ErrorType { get; } /// /// 业务错误码 /// public string? ErrorCode { get; } /// /// 错误来源 /// public string? Source { get; } /// /// 请求 ID /// public string? RequestId { get; } /// /// 是否可重试 /// public bool IsRetryable { get; } /// /// 原始错误对象 /// public TokenHubError? ErrorDetail { get; } public TokenHubException( string message, int statusCode, TokenHubError? errorDetail = null, Exception? innerException = null) : base(message, innerException) { StatusCode = statusCode; ErrorDetail = errorDetail; if (errorDetail != null) { ErrorType = errorDetail.Type; ErrorCode = errorDetail.Code; Source = errorDetail.Source; RequestId = errorDetail.RequestId; IsRetryable = errorDetail.IsRetryable; } } public override string ToString() { var parts = new List { $"StatusCode: {StatusCode}", $"Message: {Message}" }; if (!string.IsNullOrEmpty(ErrorCode)) parts.Add($"ErrorCode: {ErrorCode}"); if (!string.IsNullOrEmpty(ErrorType)) parts.Add($"ErrorType: {ErrorType}"); if (!string.IsNullOrEmpty(RequestId)) parts.Add($"RequestId: {RequestId}"); if (IsRetryable) parts.Add("Retryable: Yes"); return $"TokenHubException: {string.Join(", ", parts)}"; } ///// ///// 转换为 JsonView ///// //public JsonView ToJsonView(this TokenHubException ex) //{ // // 获取用户友好消息(使用已有的扩展方法) // string message = ex.GetUserFriendlyMessage(); // // 构建附加数据 // var data = new // { // ex.StatusCode, // ex.ErrorCode, // ex.ErrorType, // ex.RequestId, // ex.IsRetryable, // ex.Source // }; // // 使用 JsonView.Fail 返回 // return JsonView.Fail(message, StatusCodes.Status400BadRequest, data); //} }