如何在MVC-5中从Sweet-Alert调用Web API上的删除方法?

时间:2018-10-26 11:55:16

标签: jquery ajax asp.net-mvc asp.net-web-api sweetalert

我想在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删除方法?

1 个答案:

答案 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();
    }