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

ASP Web API实现Score对象批量提交的技术方案求助

批量提交技能分数的解决方案

问题背景

现有Web API仅支持单次提交单个Score对象,无法满足批量提交多条工程师技能分数记录的需求,需修改接口与调用代码实现批量提交功能。


1. 修改Web API的批量提交接口

将接口参数改为接收List<Score>集合,同时调整数据插入逻辑为批量操作:

[HttpPost("batch")] // 新增独立路由,避免与原有单条提交接口冲突
public async Task<ActionResult<IEnumerable<Score>>> PostScores(List<Score> scores)
{
    if (scores == null || !scores.Any())
    {
        return BadRequest("提交的分数列表不能为空");
    }

    _context.Scores.AddRange(scores);
    await _context.SaveChangesAsync();

    return CreatedAtAction("GetScores", scores);
}

说明:使用AddRange替代Add实现批量插入,比循环单条插入效率更高;保留原有单条提交接口的兼容性,不影响原有业务逻辑。


2. 调整UI端的批量调用代码

修改NewSubmission方法,改为接收分数列表并调用批量接口:

public ActionResult NewSubmission(List<ScoreModel> newScoreSubmissions)
{
    if (newScoreSubmissions == null || !newScoreSubmissions.Any())
    {
        ModelState.AddModelError(string.Empty, "请至少提交一条分数记录");
        return View(newScoreSubmissions);
    }

    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri(Baseurl + "/api/Scores/batch");

        // 提交分数列表集合
        var postTask = client.PostAsJsonAsync<List<ScoreModel>>(client.BaseAddress, newScoreSubmissions);
        postTask.Wait();

        var result = postTask.Result;
        if (result.IsSuccessStatusCode)
        {
            return RedirectToAction("ListScores");
        }
        else
        {
            ModelState.AddModelError(string.Empty, "提交失败,请联系技术支持");
        }
    }

    return View(newScoreSubmissions);
}

说明:参数改为List<ScoreModel>,与API接口的参数类型匹配;增加空列表校验,提前给用户错误提示;完善错误分支的页面反馈逻辑。


3. 关键注意事项

  • 确保前端ScoreModel与后端Score类的属性名称、数据类型完全一致,避免序列化/反序列化失败
  • 若需要批量提交的原子性(所有记录要么全部成功,要么全部回滚),可添加事务处理:
    using (var transaction = await _context.Database.BeginTransactionAsync())
    {
        try
        {
            _context.Scores.AddRange(scores);
            await _context.SaveChangesAsync();
            await transaction.CommitAsync();
        }
        catch
        {
            await transaction.RollbackAsync();
            throw;
        }
    }
    

内容的提问来源于stack exchange,提问作者Chris Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:55:25