3.6 KiB
3.6 KiB
API控制器重构总结
修改概述
为了统一用户身份验证逻辑,我们将所有控制器从继承ControllerBase改为继承BaseController,并更新了GetCurrentUserId的调用方式。
修改内容
1. BaseController.cs
- 保留原有的
GetCurrentUserIdNullable()方法(返回int?) - 新增
GetCurrentUserId()方法(返回int,未认证时返回0)
2. 修改的控制器(从ControllerBase改为BaseController)
以下控制器已从继承ControllerBase改为继承BaseController,并更新了GetCurrentUserId的调用方式:
-
UsersController.cs
- 继承关系:
ControllerBase→BaseController - 更新了
GetUser、UpdateUser、ChangePassword方法中的用户ID验证逻辑 - 移除了私有的
GetCurrentUserId方法
- 继承关系:
-
MailsController.cs
- 继承关系:
ControllerBase→BaseController - 更新了所有方法中的用户ID验证逻辑(从
== null改为<= 0) - 移除了服务调用中的
.Value访问
- 继承关系:
-
UserController.cs
- 继承关系:
ControllerBase→BaseController - 更新了用户ID验证逻辑
- 继承关系:
-
AIAssistantController.cs
- 继承关系:
ControllerBase→BaseController - 更新了用户ID验证逻辑
- 继承关系:
-
AIController.cs
- 继承关系:
ControllerBase→BaseController - 更新了用户ID验证逻辑
- 继承关系:
-
CapsulesController.cs
- 继承关系:
ControllerBase→BaseController - 更新了用户ID验证逻辑
- 继承关系:
-
NotificationController.cs
- 继承关系:
ControllerBase→BaseController - 更新了用户ID验证逻辑
- 继承关系:
-
PersonalSpaceController.cs
- 继承关系:
ControllerBase→BaseController - 更新了用户ID验证逻辑
- 继承关系:
-
StatisticsController.cs
- 继承关系:
ControllerBase→BaseController - 更新了用户ID验证逻辑
- 继承关系:
-
TimeCapsulesController.cs
- 继承关系:
ControllerBase→BaseController - 更新了用户ID验证逻辑
- 继承关系:
-
TimelineController.cs
- 继承关系:
ControllerBase→BaseController - 更新了用户ID验证逻辑
- 继承关系:
3. 已继承BaseController的控制器(无需修改)
-
FileUploadController.cs
- 已继承
BaseController - 已使用正确的
GetCurrentUserId调用方式
- 已继承
-
UploadController.cs
- 已继承
BaseController - 已使用正确的
GetCurrentUserId调用方式
- 已继承
4. 不需要身份验证的控制器(保持原样)
-
TempFixController.cs
- 不需要身份验证
- 继承
ControllerBase
-
OAuthController.cs
- 处理OAuth登录流程,需要匿名访问
- 继承
ControllerBase
-
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
优势
- 代码一致性:所有控制器使用相同的用户身份验证方法
- 减少重复代码:移除了各个控制器中重复的
GetCurrentUserId实现 - 更简洁的API:
GetCurrentUserId()返回int类型,使用更方便 - 更好的可维护性:身份验证逻辑集中在
BaseController中
测试
API服务已成功启动并运行,没有出现编译错误,说明所有修改都是正确的。