我想在Sweet-alert中使用Ajax请求从MVC-5应用程序中调用Web API中的delete方法。单击删除按钮后,当用户确认要在甜言蜜语上删除该特定记录时,必须调用API Delete方法。但是,代码不会调用该方法。我的前端有以下代码:
$('#dtusers tbody').on('click', '#btnDeleteRecord', function () {
var userId = $(this).attr("data-userid").valueOf();
var details = userTable.row($(this).parents('tr')).data();
swal({
title: "Are you sure?",
text: "Delete " + details[0] + " " + details[1] + "?",
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: "Yes",
closeOnConfirm: true
},
function (isConfirm) {
if (isConfirm) {
$.ajax({
url: serviceUrl + "/api/account/deletedata",
method: 'DELETE',
data: { userId: userId },
success: function () {
}
});
}
});
});
我要调用的Web API删除方法在这里:
[HttpDelete]
[Route("deletedata")]
public IHttpActionResult DeleteData(string userId)
{
if(userId == null)
{
return BadRequest("No data deleted");
}
DBAccess dblayer = new DBAccess();
dblayer.DeleteData(userId);
return Ok();
}
我在调试前端代码时没有遇到任何错误,而且仍然没有在调用后端方法。据我所知,代码中是否存在阻止调用的任何问题。或者让我知道通过传递UserId从数据库中删除指定记录的一种完美的方法来调用我的Web API删除方法。
有什么合适的解决方案吗?还是我该如何改善从Ajax调用的Web API删除方法?
答案 0 :(得分:0)
当您尝试访问Delete API调用时必须出错,您是否尝试运行Fiddler或Postman? 如果出现任何错误405 –不允许使用的方法,则 WebDAVModule 一定是一个问题,该设置默认情况下将PUT和DELETE请求方法设置为禁用。为了使其正常工作,您需要更改这些默认值或在整个Web应用程序中将其禁用。
在您的web.config中
<system.webServer>
<modules runAllManagedModulesForAllRequests="false">
<remove name="WebDAVModule" />
</modules>
</system.webServer>
如果仍然遇到问题,建议您将HttpVerb更改为POST以处理删除数据。
function (isConfirm) {
if (isConfirm) {
$.ajax({
url: serviceUrl + "/api/account/deletedata",
method: 'POST',
data: { userId: userId },
success: function () {
}
});
}
});
[HttpPost]
[Route("deletedata")]
public IHttpActionResult DeleteData(string userId)
{
if(userId == null)
{
return BadRequest("No data deleted");
}
DBAccess dblayer = new DBAccess();
dblayer.DeleteData(userId);
return Ok();
}