You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 13:33:38