Ng-file-upload: отправка массива в Web Api - PullRequest
0 голосов
/ 29 августа 2018

Использование angularjs 1.3 и C # .net core web api

У меня есть ng-file-upload, который используется для загрузки файла. Когда вызывается метод загрузки, я хочу передать дополнительный массив некоторых данных в метод загрузки, который затем получен методом в моем веб-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;
    });
};

Ниже мой webapi:

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

И, наконец, вот массив, который я пытаюсь передать вместе с загрузкой в ​​мой webapi:

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

Проблема в моем webapi, параметр 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 Ответ

0 голосов
/ 30 августа 2018

Для передачи массива объектов вам нужно определить объект списка для принятия параметров.

  1. ArrayItem с 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;
    });
}; 
});
...