Files
emall-api/API控制器重构总结.md
2025-10-16 15:21:52 +08:00

3.6 KiB
Raw Blame History

API控制器重构总结

修改概述

为了统一用户身份验证逻辑,我们将所有控制器从继承ControllerBase改为继承BaseController,并更新了GetCurrentUserId的调用方式。

修改内容

1. BaseController.cs

  • 保留原有的GetCurrentUserIdNullable()方法(返回int?
  • 新增GetCurrentUserId()方法(返回int未认证时返回0

2. 修改的控制器从ControllerBase改为BaseController

以下控制器已从继承ControllerBase改为继承BaseController,并更新了GetCurrentUserId的调用方式:

  1. UsersController.cs

    • 继承关系:ControllerBaseBaseController
    • 更新了GetUserUpdateUserChangePassword方法中的用户ID验证逻辑
    • 移除了私有的GetCurrentUserId方法
  2. MailsController.cs

    • 继承关系:ControllerBaseBaseController
    • 更新了所有方法中的用户ID验证逻辑== null改为<= 0
    • 移除了服务调用中的.Value访问
  3. UserController.cs

    • 继承关系:ControllerBaseBaseController
    • 更新了用户ID验证逻辑
  4. AIAssistantController.cs

    • 继承关系:ControllerBaseBaseController
    • 更新了用户ID验证逻辑
  5. AIController.cs

    • 继承关系:ControllerBaseBaseController
    • 更新了用户ID验证逻辑
  6. CapsulesController.cs

    • 继承关系:ControllerBaseBaseController
    • 更新了用户ID验证逻辑
  7. NotificationController.cs

    • 继承关系:ControllerBaseBaseController
    • 更新了用户ID验证逻辑
  8. PersonalSpaceController.cs

    • 继承关系:ControllerBaseBaseController
    • 更新了用户ID验证逻辑
  9. StatisticsController.cs

    • 继承关系:ControllerBaseBaseController
    • 更新了用户ID验证逻辑
  10. TimeCapsulesController.cs

    • 继承关系:ControllerBaseBaseController
    • 更新了用户ID验证逻辑
  11. TimelineController.cs

    • 继承关系:ControllerBaseBaseController
    • 更新了用户ID验证逻辑

3. 已继承BaseController的控制器无需修改

  1. FileUploadController.cs

    • 已继承BaseController
    • 已使用正确的GetCurrentUserId调用方式
  2. UploadController.cs

    • 已继承BaseController
    • 已使用正确的GetCurrentUserId调用方式

4. 不需要身份验证的控制器(保持原样)

  1. TempFixController.cs

    • 不需要身份验证
    • 继承ControllerBase
  2. OAuthController.cs

    • 处理OAuth登录流程需要匿名访问
    • 继承ControllerBase
  3. AuthController.cs

    • 处理认证流程,需要匿名访问
    • 继承ControllerBase
    • 保留私有的GetCurrentUserIdNullable方法,并重命名为GetCurrentUserIdNullable以避免冲突

修改后的用户ID验证逻辑

修改前

var currentUserId = GetCurrentUserId();
if (currentUserId == null)
{
    return Unauthorized();
}
// 使用currentUserId.Value

修改后

var currentUserId = GetCurrentUserId();
if (currentUserId <= 0)
{
    return Unauthorized();
}
// 直接使用currentUserId

优势

  1. 代码一致性:所有控制器使用相同的用户身份验证方法
  2. 减少重复代码:移除了各个控制器中重复的GetCurrentUserId实现
  3. 更简洁的APIGetCurrentUserId()返回int类型,使用更方便
  4. 更好的可维护性:身份验证逻辑集中在BaseController

测试

API服务已成功启动并运行没有出现编译错误说明所有修改都是正确的。