120 lines
3.6 KiB
Markdown
120 lines
3.6 KiB
Markdown
# 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服务已成功启动并运行,没有出现编译错误,说明所有修改都是正确的。 |