using Sharp.NetServer.Attributes; using Sharp.NetServer.Controllers; using Sharp.NetServer.Models; namespace NetServer.Test.Examples.Controllers; /// /// 用户管理控制器示例 /// [ApiController] [Route("api/users")] [Authorize] // 所有接口默认需要认证 public class UserController : BaseController { // 模拟数据库 private static readonly List Users = new() { new User { Id = 1, Name = "张三", Email = "zhangsan@example.com", Role = "Admin" }, new User { Id = 2, Name = "李四", Email = "lisi@example.com", Role = "User" }, new User { Id = 3, Name = "王五", Email = "wangwu@example.com", Role = "User" } }; /// /// 获取所有用户(需要 Admin 角色) /// GET /api/users /// [Authorize(Roles = "Admin")] [RateLimit(50, RateLimitScope.User)] [HttpGet] public async Task GetAllUsersAsync(HttpContext context) { await WriteSuccessResponseAsync(context, Users); } /// /// 获取单个用户 /// GET /api/users/1 /// [HttpGet("{id}")] [ResponseCache(30)] // 缓存 30 秒 public async Task GetUserByIdAsync(HttpContext context) { var idStr = context.Request.Url.Segments.LastOrDefault()?.TrimEnd('/'); if (int.TryParse(idStr, out var id)) { var user = Users.FirstOrDefault(u => u.Id == id); if (user != null) { await WriteSuccessResponseAsync(context, user); return; } } await NotFoundAsync(context, "用户未找到"); } /// /// 创建用户(需要 Admin 角色) /// POST /api/users /// Body: { "name": "赵六", "email": "zhaoliu@example.com", "role": "User" } /// [Authorize(Roles = "Admin")] [RateLimit(10, RateLimitScope.User)] [HttpPost] public async Task CreateUserAsync(HttpContext context) { var userData = await ReadJsonBodyAsync(context); if (userData == null || string.IsNullOrEmpty(userData.Name)) { await BadRequestAsync(context, "无效的用户数据"); return; } userData.Id = Users.Max(u => u.Id) + 1; Users.Add(userData); await WriteSuccessResponseAsync(context, userData, "用户创建成功"); } /// /// 更新用户 /// PUT /api/users/1 /// Body: { "name": "新名字", "email": "newemail@example.com" } /// [HttpPut("{id}")] public async Task UpdateUserAsync(HttpContext context) { var idStr = context.Request.Url.Segments.LastOrDefault()?.TrimEnd('/'); if (!int.TryParse(idStr, out var id)) { await BadRequestAsync(context, "无效的用户ID"); return; } var user = Users.FirstOrDefault(u => u.Id == id); if (user == null) { await NotFoundAsync(context, "用户未找到"); return; } var updateData = await ReadJsonBodyAsync(context); if (updateData != null) { if (!string.IsNullOrEmpty(updateData.Name)) user.Name = updateData.Name; if (!string.IsNullOrEmpty(updateData.Email)) user.Email = updateData.Email; if (!string.IsNullOrEmpty(updateData.Role)) user.Role = updateData.Role; } await WriteSuccessResponseAsync(context, user, "用户更新成功"); } /// /// 删除用户(需要 Admin 角色) /// DELETE /api/users/1 /// [Authorize(Roles = "Admin")] [HttpDelete("{id}")] public async Task DeleteUserAsync(HttpContext context) { var idStr = context.Request.Url.Segments.LastOrDefault()?.TrimEnd('/'); if (!int.TryParse(idStr, out var id)) { await BadRequestAsync(context, "无效的用户ID"); return; } var user = Users.FirstOrDefault(u => u.Id == id); if (user == null) { await NotFoundAsync(context, "用户未找到"); return; } Users.Remove(user); await WriteSuccessResponseAsync(context, new { id }, "用户删除成功"); } /// /// 搜索用户(允许匿名访问) /// GET /api/users/search?keyword=张 /// [AllowAnonymous] [RateLimit(100, RateLimitScope.Ip)] [HttpGet("search")] public async Task SearchUsersAsync(HttpContext context) { var keyword = GetQueryParam(context, "keyword", ""); var results = Users.Where(u => u.Name.Contains(keyword, StringComparison.OrdinalIgnoreCase) || u.Email.Contains(keyword, StringComparison.OrdinalIgnoreCase) ).ToList(); await WriteSuccessResponseAsync(context, results); } } /// /// 用户数据模型 /// public class User { public int Id { get; set; } public string Name { get; set; } = string.Empty; public string Email { get; set; } = string.Empty; public string Role { get; set; } = "User"; }