AJAX asp.net MVC 中的 DELETE 请求

AJAX DELETE request in asp.net MVC

我一直认为删除请求应该使用类型来完成:"DELETE"。但是,它似乎不适用于 .NET

$.ajax({
    type: "GET",
    url: '/TestController/DeleteTest?id=10',
    contentType: 'application/json; charset=utf-8',
    success: function (data) {
        if (data) {
            // Works
        }
    },
    error: function (erro) {
        console.debug(erro);
    }
});

控制器:

[HttpGet]
    public JsonResult DeleteTest()
    {
        int id= Int32.Parse(Request["id"]);

        var myTableTest= db.myTable.Where(x => x.id== id).FirstOrDefault();
        db.mytable.Remove(myTableTest);

        db.SaveChanges();
        return Json(true, JsonRequestBehavior.AllowGet);
    }

这段代码工作正常!但是,如果我改为键入:"DELETE",它将不再起作用。那么,asp.net 有 HttpDelete 吗?

谢谢

在 asp.net-mvc 中,我们有 HttpGetHttpPost,在这种特殊情况下,您应该使用 HttpPost 而不是 HttpGet,否则任何人都可以用查询字符串点击 url 以请求删除任何记录,另一件事是不要使用魔术字符串来生成 urls 而不是使用 Url.Action 方法来生成正确的 url 适合你。

更改您的 jquery ajax 调用以使用 post:

$.ajax({
    type: "POST",
    url: '@Url.Action("DeleteTest","Test")',
    data: {id:10},
    contentType: 'application/json; charset=utf-8',
    success: function (data) {

然后在您的操作中使用 HttpPost 并将参数添加到您的操作方法签名中,例如:

[HttpPost]
public JsonResult DeleteTest(int id)
{

    var myTableTest= db.myTable.Where(x => x.id== id).FirstOrDefault();
    db.mytable.Remove(myTableTest);

    db.SaveChanges();
    return Json(true, JsonRequestBehavior.AllowGet);
}

希望对您有所帮助。

您应该可以使用 [HttpDelete] 属性而不是 [HttpGet] 来装饰您的操作。我还将其设置为 return 和 ActionResult 而不是 JsonResult 和 return new HttpStatusCodeResult(200) 以确保您的 ajax 调用成功正确理解 returned 结果。

您的方法使用 [HttpGet] 属性修饰。这告诉框架只有在使用 GET 动词时才应考虑该方法。

如果您希望它响应 DELETE,您需要将属性更改为 [HttpDelete]

[HttpDelete]
public JsonResult DeleteTest()
{
    ...
}