ApiResponse.cs
4.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
namespace Rcs.Application.Common
{
/// <summary>
/// API响应统一包装类
/// </summary>
/// <typeparam name="T">数据类型</typeparam>
public class ApiResponse<T>
{
/// <summary>
/// 是否成功
/// </summary>
public bool Success { get; set; }
/// <summary>
/// 业务状态码
/// </summary>
public int Code { get; set; }
/// <summary>
/// 响应消息
/// </summary>
public string Message { get; set; }
/// <summary>
/// 响应数据
/// </summary>
public T Data { get; set; }
/// <summary>
/// 时间戳
/// </summary>
public long Timestamp { get; set; }
/// <summary>
/// 错误详情(用于验证错误等)
/// </summary>
public Dictionary<string, string[]>? Errors { get; set; }
/// <summary>
/// 元数据(用于分页信息等)
/// </summary>
public object? Metadata { get; set; }
public ApiResponse()
{
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
}
/// <summary>
/// 创建成功响应
/// </summary>
/// <param name="data">响应数据</param>
/// <param name="message">消息</param>
/// <param name="code">业务状态码</param>
/// <returns></returns>
public static ApiResponse<T> Successful(T data, string message = "操作成功", int code = 200)
{
return new ApiResponse<T>
{
Success = true,
Code = code,
Message = message,
Data = data
};
}
/// <summary>
/// 创建成功响应(无数据)
/// </summary>
/// <param name="message">消息</param>
/// <param name="code">业务状态码</param>
/// <returns></returns>
public static ApiResponse<T> Successful(string message = "操作成功", int code = 200)
{
return new ApiResponse<T>
{
Success = true,
Code = code,
Message = message,
Data = default
};
}
/// <summary>
/// 创建失败响应
/// </summary>
/// <param name="message">错误消息</param>
/// <param name="code">业务状态码</param>
/// <param name="data">响应数据</param>
/// <returns></returns>
public static ApiResponse<T> Failed(string message, int code = 400, T data = default)
{
return new ApiResponse<T>
{
Success = false,
Code = code,
Message = message,
Data = data
};
}
/// <summary>
/// 创建验证失败响应
/// </summary>
/// <param name="errors">验证错误详情</param>
/// <param name="message">错误消息</param>
/// <returns></returns>
public static ApiResponse<T> ValidationFailed(Dictionary<string, string[]> errors, string message = "验证失败")
{
return new ApiResponse<T>
{
Success = false,
Code = 400,
Message = message,
Data = default,
Errors = errors
};
}
/// <summary>
/// 设置元数据
/// </summary>
/// <param name="metadata">元数据对象</param>
/// <returns></returns>
public ApiResponse<T> WithMetadata(object metadata)
{
Metadata = metadata;
return this;
}
}
/// <summary>
/// 非泛型API响应类(用于无数据返回的场景)
/// </summary>
public class ApiResponse : ApiResponse<object>
{
/// <summary>
/// 创建成功响应
/// </summary>
public static new ApiResponse Successful(string message = "操作成功", int code = 200)
{
return new ApiResponse
{
Success = true,
Code = code,
Message = message
};
}
/// <summary>
/// 创建失败响应
/// </summary>
public static new ApiResponse Failed(string message, int code = 400)
{
return new ApiResponse
{
Success = false,
Code = code,
Message = message
};
}
}
}