Files
emall-api/API控制器重构总结.md

120 lines
3.6 KiB
Markdown
Raw Normal View History

2025-10-16 15:21:52 +08:00
# API控制器重构总结
## 修改概述
为了统一用户身份验证逻辑,我们将所有控制器从继承`ControllerBase`改为继承`BaseController`,并更新了`GetCurrentUserId`的调用方式。
## 修改内容
### 1. BaseController.cs
- 保留原有的`GetCurrentUserIdNullable()`方法(返回`int?`
- 新增`GetCurrentUserId()`方法(返回`int`未认证时返回0
### 2. 修改的控制器从ControllerBase改为BaseController
以下控制器已从继承`ControllerBase`改为继承`BaseController`,并更新了`GetCurrentUserId`的调用方式:
1. **UsersController.cs**
- 继承关系:`ControllerBase``BaseController`
- 更新了`GetUser``UpdateUser``ChangePassword`方法中的用户ID验证逻辑
- 移除了私有的`GetCurrentUserId`方法
2. **MailsController.cs**
- 继承关系:`ControllerBase``BaseController`
- 更新了所有方法中的用户ID验证逻辑`== null`改为`<= 0`
- 移除了服务调用中的`.Value`访问
3. **UserController.cs**
- 继承关系:`ControllerBase``BaseController`
- 更新了用户ID验证逻辑
4. **AIAssistantController.cs**
- 继承关系:`ControllerBase``BaseController`
- 更新了用户ID验证逻辑
5. **AIController.cs**
- 继承关系:`ControllerBase``BaseController`
- 更新了用户ID验证逻辑
6. **CapsulesController.cs**
- 继承关系:`ControllerBase``BaseController`
- 更新了用户ID验证逻辑
7. **NotificationController.cs**
- 继承关系:`ControllerBase``BaseController`
- 更新了用户ID验证逻辑
8. **PersonalSpaceController.cs**
- 继承关系:`ControllerBase``BaseController`
- 更新了用户ID验证逻辑
9. **StatisticsController.cs**
- 继承关系:`ControllerBase``BaseController`
- 更新了用户ID验证逻辑
10. **TimeCapsulesController.cs**
- 继承关系:`ControllerBase``BaseController`
- 更新了用户ID验证逻辑
11. **TimelineController.cs**
- 继承关系:`ControllerBase``BaseController`
- 更新了用户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验证逻辑
### 修改前
```csharp
var currentUserId = GetCurrentUserId();
if (currentUserId == null)
{
return Unauthorized();
}
// 使用currentUserId.Value
```
### 修改后
```csharp
var currentUserId = GetCurrentUserId();
if (currentUserId <= 0)
{
return Unauthorized();
}
// 直接使用currentUserId
```
## 优势
1. **代码一致性**:所有控制器使用相同的用户身份验证方法
2. **减少重复代码**:移除了各个控制器中重复的`GetCurrentUserId`实现
3. **更简洁的API**`GetCurrentUserId()`返回`int`类型,使用更方便
4. **更好的可维护性**:身份验证逻辑集中在`BaseController`
## 测试
API服务已成功启动并运行没有出现编译错误说明所有修改都是正确的。