我有一个类似下面的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的网络标签,我可以看到表单数据中的项目:
我在这里缺少什么?
答案 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();
}
现在它的工作!