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

如何使用EF Core实现RemoveTodoItem接口解决未实现报错?

如何用EF Core实现RemoveTodoItem API端点删除待办项?

我需要更新API,实现下面代码里的RemoveTodoItem方法,用EF Core根据ID删除待办项:

[HttpDelete("{id}", Name = "DeleteTodoItem")]
public async Task<IActionResult> RemoveTodoItem(int id)
{
    // TODO
    // Use EF Core to remove the item based on id

    throw new NotImplementedException();
}

运行程序时遇到报错:

HttpRequestException: you must first implement the API endpoint.
Candidate.Web.Services.CandidateApi.RemoveTodoItem(int id) in CandidateApi.cs

对应的异常抛出代码片段:

}
        catch (Exception ex)
        {
            throw new HttpRequestException("You must first implement the API endpoint.");
        }

        throw new HttpRequestException("You must first implement the API endpoint.");

我试过用DeleteTodoItem变量但没成功,不知道该怎么操作。


实现步骤

要解决这个问题,你需要完成RemoveTodoItem方法的EF Core删除逻辑,替换掉原来的NotImplementedException,具体步骤如下:

  1. 确认DbContext注入
    确保你的API控制器已经通过构造函数注入了EF Core的DbContext实例(示例中为TodoContext):
private readonly TodoContext _context;

public CandidateApi(TodoContext context)
{
    _context = context;
}
  1. 完整实现删除逻辑
    在RemoveTodoItem方法中,先根据ID查找待办项,找到后执行删除并保存更改:
[HttpDelete("{id}", Name = "DeleteTodoItem")]
public async Task<IActionResult> RemoveTodoItem(int id)
{
    // 根据ID查找目标待办项
    var todoItem = await _context.TodoItems.FindAsync(id);
    
    // 若未找到对应项,返回404 NotFound
    if (todoItem == null)
    {
        return NotFound();
    }

    // 从DbSet中移除待办项
    _context.TodoItems.Remove(todoItem);
    // 将更改保存到数据库
    await _context.SaveChangesAsync();

    // 删除成功,返回204 No Content(无响应体)
    return NoContent();
}
  1. 简化删除方式(可选)
    如果无需先查询实体详情,可以直接构造仅包含ID的实体并删除(适合确定实体存在的场景):
[HttpDelete("{id}", Name = "DeleteTodoItem")]
public async Task<IActionResult> RemoveTodoItem(int id)
{
    var todoItem = new TodoItem { Id = id };
    _context.TodoItems.Attach(todoItem);
    _context.TodoItems.Remove(todoItem);
    
    // 保存更改并获取受影响行数
    int rowsAffected = await _context.SaveChangesAsync();
    
    // 若受影响行数为0,说明未找到对应实体
    if (rowsAffected == 0)
    {
        return NotFound();
    }

    return NoContent();
}

报错原因说明

你遇到的HttpRequestException是因为原方法未实现核心删除逻辑——要么是你没有替换掉throw new NotImplementedException(),要么是外层catch块捕获了这个未实现异常,进而抛出了提示你必须实现端点的错误。完成上述逻辑后,该报错会自动消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 10:00:09