refactor: 统一业务异常处理,标准化结果码和错误响应

1.  新增并完善ResultCode枚举,补充标准HTTP状态码对应的业务状态码
2.  重构BusinessException,新增基于ResultCode的构造函数和ThrowIf扩展方法
3.  替换所有硬编码的HTTP状态码为统一的ResultCode枚举
4.  优化全局异常中间件,根据业务状态码映射对应HTTP状态码并规范化JSON响应
5.  修复OssImageHelper和AutoDotCodeConsumer中的OSS文件处理逻辑
6.  新增用户答题快照实体类
7.  清理废弃的宠物模块迁移脚本
This commit is contained in:
glz
2026-06-29 16:34:26 +08:00
parent 4579fefef9
commit bdaa6a0dc8
35 changed files with 693 additions and 364 deletions

View File

@ -62,7 +62,10 @@ public abstract class BaseController : ControllerBase
/// <returns>统一响应对象</returns>
protected BaseResponse<object> Fail(string message, int code = 500)
{
return BaseResponse<object>.Fail(ResultCode.GLOBAL_ERROR, message);
var resultCode = Enum.IsDefined(typeof(ResultCode), code)
? (ResultCode)code
: ResultCode.GLOBAL_ERROR;
return BaseResponse<object>.Fail(resultCode, message);
}
protected IActionResult ApiResult(bool success, string msg)
@ -91,7 +94,7 @@ public abstract class BaseController : ControllerBase
//var webHostEnvironment = App.WebHostEnvironment;
if (!Path.Exists(path))
{
throw new BusinessException(fileName + "文件不存在");
throw new BusinessException(fileName + "文件不存在", ResultCode.NOT_FOUND);
}
var stream = System.IO.File.OpenRead(path); //创建文件流

View File

@ -395,15 +395,15 @@ namespace QYZH.InteractiveMagazine.WebApi.Controllers
{
var entity = await JournalService.GetFirstAsync(x => x.Id == JournalId);
if (entity == null)
throw new BusinessException("书籍不存在");
throw new BusinessException("书籍不存在", ResultCode.NOT_FOUND);
var downloadUrl = entity.DownloadJournalPagePdfName;
if (string.IsNullOrWhiteSpace(downloadUrl))
throw new BusinessException("下载点阵码PDF文件为空,请先铺码");
throw new BusinessException("下载点阵码PDF文件为空,请先铺码", ResultCode.BAD_REQUEST);
var stream = await httpClientFactory.CreateClient().GetStreamAsync(downloadUrl); //创建文件流
if (stream == null)
throw new BusinessException("下载点阵码PDF文件失败");
throw new BusinessException("下载点阵码PDF文件失败", ResultCode.GLOBAL_ERROR);
Response.Headers.Append("Access-Control-Expose-Headers", "Content-Disposition");