using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.DataProtection.KeyManagement; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Helper; namespace WIDESEA_Core.BaseController { [Authorize, ApiController] public class ApiBaseController : Controller { protected IService Service; public ApiBaseController(IService service) { Service = service; } /// /// 获取分页数据 /// /// 分页查询参数 /// 分页查询结果 [HttpPost, Route("GetPageData")] public virtual ActionResult GetPageData([FromBody] PageDataOptions options) { return Json(InvokeService("GetPageData", new object[] { options })); } /// /// 获取详情页数据 /// /// 分页查询参数 /// 返回详情页数据结果 [HttpPost, Route("GetDetailPage")] public virtual ActionResult GetDetailPage([FromBody] PageDataOptions pageData) { return Json(InvokeService("GetDetailPage", new object[] { pageData })); } /// /// 添加数据 /// /// 要添加的实体数据 /// 操作结果 [HttpPost, Route("AddData")] public virtual ActionResult AddData([FromBody] TEntity options) { return Json(InvokeService("AddData", new object[] { options })); } /// /// 添加数据 /// /// 保存模型参数 /// 操作结果 [HttpPost, Route("Add")] public virtual ActionResult Add([FromBody] SaveModel options) { return Json(InvokeService("AddData", new object[] { options })); } /// /// 更新数据 /// /// 包含更新数据的模型 /// 操作结果 [HttpPost, Route("Update")] public virtual ActionResult Update([FromBody] SaveModel options) { return Json(InvokeService("UpdateData", new object[] { options })); } /// /// 更新数据 /// /// 要更新的实体数据 /// 操作结果 [HttpPost, Route("UpdateData")] public virtual ActionResult UpdateData([FromBody] TEntity options) { return Json(InvokeService("UpdateData", new object[] { options })); } /// /// 处理删除数据的HTTP POST请求 /// /// 要删除的数据主键数组 /// 返回删除操作的JSON格式结果 /// /// 该方法是虚拟方法,可通过路由"Del"访问,调用服务层的DeleteData方法执行实际删除操作 /// [HttpPost, Route("Del")] public virtual ActionResult Del([FromBody] object[] key) { return Json(InvokeService("DeleteData", new object[] { key })); } /// /// 导出数据接口 /// /// 分页数据选项 /// /// 成功时返回文件下载,失败时返回JSON格式的响应内容 /// /// /// 调用服务层"Export"方法处理导出请求,根据返回结果生成文件下载或错误响应 /// [HttpPost, Route("Export")] public virtual ActionResult Export([FromBody] PageDataOptions loadData) { WebResponseContent result = InvokeService("Export", new object[] { loadData }) as WebResponseContent; if (result.Status) return File( System.IO.File.ReadAllBytes(result.Data.ToString()), System.Net.Mime.MediaTypeNames.Application.Octet, Path.GetFileName(result.Data.ToString()) ); return Json(result); } /// /// 下载模板文件 /// /// 返回文件流或JSON结果 /// /// 支持POST和GET请求。当操作成功时返回文件流下载,失败时返回包含错误信息的JSON响应。 /// [HttpPost, HttpGet, Route("DownLoadTemplate")] public virtual ActionResult DownLoadTemplate() { WebResponseContent result = InvokeService("DownLoadTemplate", new object[] { }) as WebResponseContent; if (result.Status) return File( System.IO.File.ReadAllBytes(result.Data.ToString()), System.Net.Mime.MediaTypeNames.Application.Octet, Path.GetFileName(result.Data.ToString()) ); return Json(result); } /// /// 导入文件数据 /// /// 上传的文件列表 /// 导入操作结果 [HttpPost, Route("Import")] public virtual ActionResult Import(List fileInput) { return Json(InvokeService("Import", new object[] { fileInput })); } /// /// 导出种子数据API接口 /// /// 返回种子数据导出结果 /// 该接口允许匿名访问 [HttpPost, Route("ExportSeedData"), AllowAnonymous] public ActionResult ExportSeedData() { return Json(InvokeService("ExportSeedData", new object[] { })); } /// /// 调用服务方法 /// /// 要调用的方法名称 /// 方法参数数组 /// 调用方法的返回结果 /// /// 通过反射动态调用Service对象中的指定方法 /// private object InvokeService(string methodName, object[] parameters) { Type t = Service.GetType(); List types = new List(); foreach (var param in parameters) { types.Add(param.GetType()); } MethodInfo method = t.GetMethod(methodName, types.ToArray()); return method.Invoke(Service, parameters); } } }