using System; namespace Apewer.Web { /// WebAPI 控制器基类。 /// 控制器具有 Independent 特性时,不匹配 Function,且忽略 Initializer 返回值。 public abstract class ApiController { internal Func _func = null; internal Action _action = null; internal Action _default = null; internal ApiOptions _options = null; /// 获取 API 请求模型。 public ApiRequest Request { get; internal set; } /// 获取 API 响应模型。 public ApiResponse Response { get; internal set; } /// 创建控制器实例。可通过初始化程序返回布尔值,以执行 Function 解析。 /// 初始化程序。当返回 False 时等同于声明 Independent,将不再匹配 Function 和 Default。 /// 在匹配 Function 且失败后执行的方法。 /// 执行顺序:构造函数 -> Initializer -> Function -> Default -> Dispose public ApiController(Func initializer = null, Action @default = null) { _func = initializer; _default = @default; } /// 创建控制器实例。可通过初始化程序返回布尔值,以执行 Function 解析。 /// 初始化程序。 /// 在匹配 Function 且失败后执行的方法。 /// 执行顺序:构造函数 -> Initializer -> Function -> Default -> Dispose public ApiController(Action initializer, Action @default = null) { _func = (c) => { initializer?.Invoke(this); return true; }; _default = @default; } } /// WebAPI 控制器基类。 /// 控制器具有 Independent 特性时,不匹配 Function,且忽略 Initializer 返回值。 public abstract class ApiController : ApiController where T : ApiController { static Func ToBaseFunc(Func current) { if (current == null) return null; return new Func(c => current.Invoke((T)c)); } static Action ToBaseAction(Action current) { if (current == null) return null; return new Action(c => current.Invoke((T)c)); } /// 创建控制器实例。可通过初始化程序返回布尔值,以执行 Function 解析。 /// 初始化程序。当返回 False 时等同于声明 Independent,将不再匹配 Function 和 Default。 /// 在匹配 Function 且失败后执行的方法。 /// 执行顺序:构造函数 -> Initializer -> Function -> Default -> Dispose public ApiController(Func initializer = null, Action @default = null) : base(ToBaseFunc(initializer), ToBaseAction(@default)) { } /// 创建控制器实例。可通过初始化程序返回布尔值,以执行 Function 解析。 /// 初始化程序。 /// 在匹配 Function 且失败后执行的方法。 /// 执行顺序:构造函数 -> Initializer -> Function -> Default -> Dispose public ApiController(Action initializer, Action @default = null) : base(ToBaseAction(initializer), ToBaseAction(@default)) { } } }