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

使用Entity Framework构建Web API,调用DELETE接口遇localhost/api未找到错误

解决AJAX DELETE请求到Web API时的404未找到错误

我来帮你排查这个404问题,这种情况通常是几个关键环节出了疏漏,咱们一步步来梳理:

1. 先补全并修正AJAX请求的URL

你目前的代码里url:...是不完整的,这大概率是核心问题之一。首先得拿到要删除数据的ID,然后构造出和Web API路由完全匹配的URL。

举个完整的示例,假设你的按钮上用data-id属性存了记录的ID:

@section scripts{ 
<script> 
$(document).ready(function () { 
    var table = $('#myTable').DataTable(); 
    $("#myTable .js-delete").on("click", function () { 
        var button = $(this);
        var id = button.data("id"); // 从按钮的data属性获取ID
        
        // 这里可以保留你之前的bootbox确认逻辑
        bootbox.confirm("Do you want to delete this movie?", function (result) {
            if (result) {
                $.ajax({
                    url: `/api/movies/${id}`, // 替换成你的API控制器路径+ID,比如api/[控制器名]/ID
                    type: "DELETE",
                    success: function() {
                        // 删除成功后同步更新DataTable
                        table.row(button.closest("tr")).remove().draw();
                    },
                    error: function(xhr) {
                        console.log("删除失败:", xhr.responseText);
                    }
                });
            }
        });
    }); 
}); 
</script> 
}

记得要保证这个URL和你的Web API后端路由完全对应,比如如果你的控制器是MoviesController,那基础路由就是api/movies,加上ID后就是api/movies/1这种格式。

2. 验证Web API的DELETE动作配置

接下来检查你的后端控制器是否正确配置了DELETE路由:

[Route("api/[controller]")]
[ApiController]
public class MoviesController : ControllerBase
{
    private readonly YourDbContext _context;

    public MoviesController(YourDbContext context)
    {
        _context = context;
    }

    // 确保标注了HttpDelete特性,并且路由参数和方法参数一致
    [HttpDelete("{id}")]
    public IActionResult Delete(int id)
    {
        var movie = _context.Movies.Find(id);
        if (movie == null)
        {
            return NotFound(); // 这里的404是因为实体不存在,和路由错误的404要区分开
        }

        _context.Movies.Remove(movie);
        _context.SaveChanges();

        return NoContent(); // DELETE请求成功通常返回204 No Content
    }
}

注意:如果你的ID不是int类型,要同步修改方法参数和路由里的{id}约束,比如{id:guid}。

3. 排查WebDAV模块拦截问题

有些情况下,ASP.NET默认的WebDAV模块会拦截DELETE请求,导致请求无法到达你的API控制器。你可以在web.config里移除这个模块:

<system.webServer>
  <modules>
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
  </handlers>
</system.webServer>

4. 确认请求方法是否正确

一定要在AJAX配置里明确指定type: "DELETE",如果写成POST或者其他方法,Web API的路由系统会找不到对应的动作方法,直接返回404。

先从URL和后端路由匹配这一步开始排查,这是最常见的触发404的原因,解决后再测试其他环节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:51:31