如何创建POST Rest API切换CompanyActivity.ShowInList布尔值?
实现切换CompanyActivity.ShowInList状态的REST API
后端C#实现
1. 控制器接口
用HttpPatch做部分更新,路由指定活动ID定位目标记录:
[HttpPatch, Route("/api/[controller]/ToggleShowInList/{activityId}")] public async Task<IActionResult> ToggleShowInList([FromRoute] int activityId) { var success = await _companyActivityService.ToggleShowInListAsync(activityId); if (!success) { return NotFound($"未找到ID为{activityId}的CompanyActivity记录"); } var updatedActivity = await _companyActivityService.GetByIdAsync(activityId); var dto = _autoMappingService.CurrentMapper.Map<CompanyActivityDTO>(updatedActivity); return Ok(dto); }
2. 服务层核心逻辑
在CompanyActivityService中实现状态反转逻辑,查询实体后修改值并保存:
public async Task<bool> ToggleShowInListAsync(int activityId) { var companyActivity = await _dbContext.CompanyActivities.FirstOrDefaultAsync(a => a.Id == activityId); if (companyActivity == null) { return false; } // 反转ShowInList的布尔值 companyActivity.ShowInList = !companyActivity.ShowInList; await _dbContext.SaveChangesAsync(); return true; } // 配套的ID查询方法(如果未实现) public async Task<CompanyActivity> GetByIdAsync(int activityId) { return await _dbContext.CompanyActivities.FindAsync(activityId); }
关键注意点
- 确保
CompanyActivity实体已在DbContext中注册,且ShowInList是对应数据库的布尔类型字段。 - 若无需返回更新后的实体,控制器可直接返回
NoContent()简化代码。
前端TypeScript调用示例
使用fetch的实现
async function toggleActivityShowInList(activityId: number): Promise<void> { try { const response = await fetch(`/api/CompanyActivity/ToggleShowInList/${activityId}`, { method: 'PATCH', headers: { 'Content-Type': 'application/json', // 项目有身份验证时添加Token头 'Authorization': `Bearer ${localStorage.getItem('authToken')}` } }); if (!response.ok) { throw new Error(await response.text()); } const updatedActivity = await response.json(); // 更新前端列表或组件状态,比如替换对应项的ShowInList值 console.log('状态切换完成:', updatedActivity); } catch (err) { console.error('切换失败:', err); } }
使用axios的实现
import axios from 'axios'; async function toggleActivityShowInList(activityId: number): Promise<void> { try { const { data: updatedActivity } = await axios.patch( `/api/CompanyActivity/ToggleShowInList/${activityId}`, {}, { headers: { 'Authorization': `Bearer ${localStorage.getItem('authToken')}` } } ); // 更新前端UI状态 console.log('状态切换完成:', updatedActivity); } catch (err) { console.error('切换失败:', (err as Error).message); } }
内容的提问来源于stack exchange,提问作者Jany
相关产品推荐
相关产品推荐

