using Microsoft.AspNetCore.Mvc; using Foxel.Models; using System.Security.Claims; using System.IdentityModel.Tokens.Jwt; using Microsoft.IdentityModel.Tokens; using System.Text; namespace Foxel.Controllers { [ApiController] [Route("api/[controller]")] public abstract class BaseApiController : ControllerBase { protected int? GetCurrentUserId() { var userIdClaim = User.FindFirst(ClaimTypes.NameIdentifier)?.Value; return userIdClaim != null ? int.Parse(userIdClaim) : null; } protected int? GetUserIdFromCookie() { try { var token = Request.Cookies["token"]; if (string.IsNullOrEmpty(token)) { return null; } var tokenHandler = new JwtSecurityTokenHandler(); if (!tokenHandler.CanReadToken(token)) { return null; } var jwtToken = tokenHandler.ReadJwtToken(token); var userIdClaim = jwtToken.Claims.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier)?.Value; if (userIdClaim != null && int.TryParse(userIdClaim, out var userId)) { return userId; } } catch (Exception) { return null; } return null; } protected ActionResult> Success(T data, string message = "操作成功", int statusCode = 200) { return Ok(new BaseResult { Success = true, Message = message, Data = data, StatusCode = statusCode }); } protected ActionResult> Success(string message = "操作成功", int statusCode = 200) { return Ok(new BaseResult { Success = true, Message = message, StatusCode = statusCode }); } protected ActionResult> Error(string message, int statusCode = 400) { return StatusCode(statusCode, new BaseResult { Success = false, Message = message, StatusCode = statusCode }); } protected ActionResult> PaginatedSuccess( List? data, int totalCount, int page, int pageSize, string message = "获取成功") { return Ok(new PaginatedResult { Success = true, Message = message, Data = data, TotalCount = totalCount, Page = page, PageSize = pageSize, StatusCode = 200 }); } protected ActionResult> PaginatedError(string message, int statusCode = 400) { return StatusCode(statusCode, new PaginatedResult { Success = false, Message = message, Data = new List(), TotalCount = 0, Page = 0, PageSize = 0, StatusCode = statusCode }); } } }