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 中,我们有 HttpGet
和 HttpPost
,在这种特殊情况下,您应该使用 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()
{
...
}
我一直认为删除请求应该使用类型来完成:"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 中,我们有 HttpGet
和 HttpPost
,在这种特殊情况下,您应该使用 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()
{
...
}