繁体   English   中英

ASP.NET MVC中的AJAX 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?

谢谢

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

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

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

您应该能够使用[HttpDelete]属性而不是[HttpGet]装饰动作。 我还将它设置为返回ActionResult而不是JsonResult并在成功时返回new HttpStatusCodeResult(200)JsonResult new HttpStatusCodeResult(200) ,以确保您的ajax调用正确理解了返回的结果。

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

更改您的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);
}

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM