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);
//}
}