using System.Diagnostics.CodeAnalysis; using SimApi.Communications; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.AspNetCore.Mvc.ModelBinding; using System.Linq; using SimApi.Exceptions; namespace SimApi.Controllers; /// /// 基础控制器,所有控制器均继承本控制器 /// 1. 自动验证请求参数 /// 2. 报错返回 /// 3. 错误回馈页面 /// /// [Consumes("application/json")] [Produces("application/json")] public class SimApiBaseController : Controller { /// /// 当前登录用户的ID /// protected SimApiLoginItem LoginInfo => (SimApiLoginItem)HttpContext.Items["LoginInfo"]!; /// /// 验证请求参数 /// /// public override void OnActionExecuting(ActionExecutingContext context) { if (context.ModelState.IsValid) return; foreach (var item in context.ModelState.Values.Where(item => item.ValidationState == ModelValidationState.Invalid)) { Error(400, item.Errors.First().ErrorMessage); break; } } /// /// 错误返回 /// /// 错误代码 /// 错误描述(若是常规错误,代码可自动带取描述) /// protected static void Error(int code = 500, string message = "") { throw new SimApiException(code, message); } /// /// 检测条件,根据条件返回报错 如果condition是ture报错 /// /// 检测条件 /// 错误代码 /// 错误描述 protected static void ErrorWhen([DoesNotReturnIf(true)] bool condition, int code = 400, string message = "") { if (condition) { Error(code, message); } } /// /// 检测条件,根据条件返回报错 如果condition是ture报错 /// /// 检测条件 /// 错误代码 /// 错误描述 protected static void ErrorWhenTrue([DoesNotReturnIf(true)] bool condition, int code = 400, string message = "") { ErrorWhen(condition, code, message); } /// /// 如果condition是false 报错 /// /// /// /// protected static void ErrorWhenFalse([DoesNotReturnIf(false)] bool condition, int code = 400, string message = "") { ErrorWhen(!condition, code, message); } /// /// 检测给定的变量是否为NUll /// /// 检测条件 /// 错误代码 /// 错误描述 protected static void ErrorWhenNull([NotNull] object? condition, int code = 404, string message = "请求的资源不存在") { ErrorWhen(condition == null, code, message); } /// /// 上传文件 /// /// protected SimApiBaseResponse UploadFile() { return new SimApiBaseResponse(); } }