ASP.NET MVC Web API使用jQuery Ajax删除调用,数据参数不起作用

时间:2017-06-12 11:01:03

标签: javascript jquery asp.net ajax asp.net-mvc

我有一个类似下面的web api方法:

    /// <summary>
    /// DELETE: api/ftpapi/custom/deletefiles
    /// </summary>
    /// <param name="items"></param>
    /// <returns></returns>
    [HttpDelete]
    [ResponseType(typeof(void))]
    public IHttpActionResult DeleteFiles(string[] items)
    {
        return Ok();
    }

在我看来,我使用Ajax调用此方法:

            var values = $('input:checkbox[name=items]:checked').map(function () {
            return this.value;
            }).get();

            $.ajax({
                url: uri_api + '/custom/deletefiles',
                method: "DELETE",
                data: { items: values }
            }).done(function (data) {
                    location.reload(true);
                })
            .fail(function (jqXHR, textStatus, err) {
                console.log('Error: ' + err);
            })
            .always(function () {
                $('#loader').fadeOut(200);
                $('body').removeClass('loader-in');
            });

当我在return Ok();放置一个断点并测试它时,它可以工作。除了参数string[] items总是空的。

如果我查看Google Chrome的网络标签,我可以看到表单数据中的项目:

enter image description here

我在这里缺少什么?

3 个答案:

答案 0 :(得分:3)

  

更改为:   由于JSON.stringify将Javascript对象转换为JSON文本并将该JSON文本存储在字符串中。

  $.ajax({
            url: uri_api + '/custom/deletefiles',
            contentType: "application/json; charset=utf-8",
            method: "DELETE",
            data: JSON.stringify({ items: values })
        }).done(function (data) {
                location.reload(true);
            })
        .fail(function (jqXHR, textStatus, err) {
            console.log('Error: ' + err);
        })
        .always(function () {
            $('#loader').fadeOut(200);
            $('body').removeClass('loader-in');
        });

答案 1 :(得分:0)

您应该data: { items: values }

,而不是撰写data: JSON.stringify({ 'items': values })

这就是ajax如何使用数组。

答案 2 :(得分:0)

感谢@Stephen Muecke我首先在我的ajax调用中添加了一些更改:

$.ajax({
     url: uri_api + '/custom/deletefiles',
     method: "DELETE",
     data: JSON.stringify({ 'items': values }), // Added Stringify
     contentType: 'application/json' // Added content type
});

我用一个属性创建了一个新的类模型:

public class FtpFilesModel
{
    public string[] Items { get; set; }
}

然后,最后要做的是将method属性更改为新创建的类:

[HttpDelete]
[ResponseType(typeof(void))]
public IHttpActionResult DeleteFiles(FtpFilesModel files)
{
    return Ok();
}

现在它的工作!