ng-file-upload:将数组发送到Web API



Using angularjs 1.3 and C# .net core web api

我有一个用于上传文件的ng文件上传。当调用上传方法时,我想将一些数据的额外数组传递给上传方法,然后由该方法在我的 web API 上接收。这是我的ng文件上传

factory.upload = function (file, myArray) {
var url = '{0}upload'.format(apiPath)
return Upload.upload({
url: url,
arrayKey: '',
data: { file: file, myArray: myArray}
}).then(function (res) {
return res;
});
};

以下是我的网络:

[HttpPost("upload")]
public async Task<IActionResult> FileUpload(IFormFile file, List<string> myArray)
{
//code
}

最后,这是我尝试通过上传到我的webapi的数组:

[
{
id: "1",
name: "steve"
},
{
id: "2",
name: "adam"
}
]

问题出在我的 webapi 中,从 UI 接受数组的 myArray 参数始终为空。我在网上搜索了它,它提到添加

arrayKey: '' 

但仍然不起作用。任何输入?

---更新---

我创建了一个字符串数组,如下所示:

var cars = ["steve", "adam", "ronnie"];

并将我的 api 更新为:

List<ArrayItem> myArray

上面的代码有效。所以看起来传递数组存在问题。 我通过像这样创建来传递以下数组:

var myArray= [];
for (var i = 0; i < myJson.length; i++) {
myArray.push({
id: myJson[i].id,
name: myJson[i].name,
});                                        
}  

上述结果如控制台所示:

Array(2)
0:{id: "1", name: "steve"}
1:{id: "2", name: "adam"}

这里缺少什么?

对于传递对象数组,您需要定义列表对象以接受参数。

  1. 具有Id/Name属性的数组项。

    public class ArrayItem
    {
    public int Id { get; set; }
    public string Name { get; set; }
    }
    
  2. 更改操作

    public async Task<IActionResult> FileUpload(IFormFile file, List<ArrayItem> myArray)
    {
    return Ok();
    }          
    

更新

您需要删除arrayKey: '[]',请尝试以下代码:

app.service('crudService', function ($http, Upload) {
var baseUrl = 'http://localhost:50829';
this.uploadFile = function (file, array) {
return Upload.upload({
url: baseUrl + "/api/books/file/upload",
//arrayKey: '[]',
data: { file: file, array: array },
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
}).then(function (res) {
return res;
}, function (err) {
throw err;
});
}; 
});

最新更新