如何使用ajax调用在REST中调用@DELETE Web服务?

时间:2014-06-25 16:59:59

标签: c# asp.net-mvc-4 asp.net-web-api

我正在开发web api项目,其中我必须编写删除帐户的方法。 我创建了一个名为RemoveAccount的控制器,我在其中编写了删除帐户方法。 以下是代码。

        public RemoveAccountRes Delete(RemoveAccountModel objRemove, string function = "")
    {
        RemoveAccountRes objModel = new RemoveAccountRes();
        if (ModelState.IsValid)
        {
            User user = null;
            try
            {
                user = UserHelper.GetLoggedInUser(Convert.ToString(user.UserGuid));
                if (user == null || objRemove.User == null)
                {
                    objModel.ErrorMessage = "User Not Valid";
                    objModel.ErrorCode = 403;
                    objModel.Success = false;

                    return objModel;
                }
                if (function == "delete")
                {
                    UserRepository.Delete(objRemove.User.UserId);
                    UserHelper.LogOutUser();
                    objModel.ErrorMessage = "Account is Deleted";
                    objModel.ErrorCode = 200;
                    objModel.UserGuid = Convert.ToString(user.UserGuid);
                    objModel.Success = true;
               }
            }
            catch (Exception ex) 
            {
                objModel.ErrorMessage = "Unidentified Error";
                objModel.ErrorCode = 500;
                objModel.UserGuid = Convert.ToString(user.UserGuid);
            }
            return objModel;
        }
        else
        {
            objModel.ErrorMessage = "Invalid/Incomplete requests";
            objModel.ErrorCode = 400;

            return objModel;
        }
    }

以上方法的模型是:

 public class RemoveAccountModel
{
    public User User { get; set; }

}

public class RemoveAccountRes
{
    public int ErrorCode { get; set; }
    public string ErrorMessage { get; set; }
    public int UserId { get; set; }
    public string UserGuid { get; set; }
    public bool Success { get; set; }
}

我创建了一个单独的Test项目来测试这个api方法。 以下是单击“删除”按钮时调用的ajax调用:

 $(document).ready(function () {
            $("#btnDelete").click(function () {
                alert("Hello");
                var request = $.ajax({
                    url: "http://localhost:13979/api/RemoveAccount?function='delete'",
                    type: "DELETE",
                    dataType: "json"
                });

                request.done(function (msg) {
                    alert("Request success: " + msg);
                    $("#divResponse").empty().append("<span>" + JSON.stringify(msg) + "</span>");
                    //console.log(JSON.stringify(msg));
                });

                request.fail(function (jqXHR, textStatus) {
                    alert("Request failed: " + textStatus);
                    $("#divResponse").empty().append("<span>" + JSON.stringify(textStatus) + "</span>");
                    //console.log(JSON.stringify(textStatus));
                });


            });

        });

当我尝试调试时,我发现它没有调用该URL并且仅为此方法获得“内部服务器错误”,其余的都正常工作。

我哪里错了?

1 个答案:

答案 0 :(得分:0)

您已经拥有参数function=delete如果HTTP请求的类型为DELETE,真的很重要,我建议将其更改为POST

来自jQuery docs

  

要求的类型(&#34; POST&#34;或&#34; GET&#34;),默认为&#34; GET&#34;。注意:此处也可以使用其他HTTP请求方法,例如PUT和DELETE,但并非所有浏览器都支持它们。

另一件事......你有正确的映射吗?

http://localhost:13979/api/RemoveAccount正在调用一个名为Delete的函数 - 如果您在路由代码中处理它,那就没问题了。