[英]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中,我们有HttpGet
和HttpPost
,在这种特殊情况下,您应该使用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.