向 HttpDelete 操作发送 DELETE 请求时路由不起作用

Bla*_*ell 5 c# asp.net-mvc asp.net-mvc-routing asp.net-mvc-controller asp.net-core-mvc

我有一个只有一个视图的 ProductsController - Index.cshtml。

以下 3 个操作方法位于此控制器内部:

//http://localhost:55555/products
[HttpGet]
public IActionResult Index()
{
}

//http://localhost:55555/products
[HttpPost]
public IActionResult Index(ProductViewModel product)
{
}

//http://localhost:55555/products/1
[HttpDelete("{id}")]
public IActionResult Index([FromRoute] int id)
{
}
Run Code Online (Sandbox Code Playgroud)

当我转到 /products 时,Get 工作得很好。当我使用 /products 创建新产品时,Post 工作得非常好。删除根本不起作用,我在 /products/9 中找不到 404。我正在使用标准的 AJAX 请求,类型为:DELETE。

我正在使用默认的 MVC 常规路由设置:

        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
Run Code Online (Sandbox Code Playgroud)

这是我的 AJAX 请求的样子:

$(".js-delete-product").click(function () {
    $.ajax({
        type: "DELETE",
        url: "products/" + $(this).data("id"),
        success: onDeleteSuccess
    });
});
Run Code Online (Sandbox Code Playgroud)

我还尝试在邮递员中向http://localhost:55555/products/1发送 DELETE 请求,以确保它不是我的 jquery ajax 并且仍然找不到 404。

更新: 如果我仅向http://localhost:55555/products发送 DELETE 请求,它将进入函数,但正如您所期望的,id 参数设置为 null。知道为什么会这样吗?如果传递了参数,我只希望它进入删除方法,但是当传递参数时,它不会进入(404 未找到)。

Jus*_*eno 4

id在属性上包含路由参数[HttpDelete]

[HttpDelete("{id}")]
public IActionResult Index([FromRoute] int id)
{
}
Run Code Online (Sandbox Code Playgroud)