我有一个只有一个 View 的 ProductsController - Index.cshtml。
以下 3 种操作方法位于此 Controller 内部:
//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)
{
}
当我转到/products 时,Get 工作得很好。当我使用/products 创建新产品时,Post 工作得非常好。删除根本不起作用,我在/products/9 中找不到 404。我正在使用标准的 AJAX 请求,类型为:DELETE。
我正在使用默认的 MVC 常规路由设置:
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
这是我的 AJAX 请求的样子:
$(".js-delete-product").click(function () {
$.ajax({
type: "DELETE",
url: "products/" + $(this).data("id"),
success: onDeleteSuccess
});
});
我还尝试在 postman 中向 http://localhost:55555/products/1 发送 DELETE 请求,以确保它不是我的 jquery ajax 并且仍然找不到 404。
更新:
如果我只向 http://localhost:55555/products 发送 DELETE 请求,它会进入函数,但正如您所期望的,id 参数设置为 null。知道为什么会这样吗?如果传递了参数,我只希望它进入删除方法,但是当传递参数时,它不会进入(404 未找到)。
最佳答案
在 id
属性中包含 [HttpDelete]
的路由参数:
[HttpDelete("{id}")]
public IActionResult Index([FromRoute] int id)
{
}
关于c# - 向 HttpDelete 操作发送 DELETE 请求时路由不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41228188/