MVC Контроллер получает нулевые данные при попытке отправить POST с FormData, используя Axios - PullRequest
1 голос
/ 08 февраля 2020

Я не могу выяснить, почему мой контроллер получает нулевые данные. Я могу связаться с контроллером, но данные не передаются. Все отлично работает на стороне контроллера, когда я использую Почтальон для тестирования API с Body и с правильным содержанием ключа / данных.

enter image description here

Мой метод контроллера:

[Route("home/api/files")]
public class FileController : ControllerBase
{
  [HttpPost]
  public async Task<IActionResult> Post([FromForm] FileModel file)
  {
    if (file == null)
      return BadRequest("Given data is null");
    if (string.IsNullOrEmpty(file.Name))
      return BadRequest("File name is undefined");
    if (string.IsNullOrEmpty(file.FolderPath))
      return BadRequest("FolderPath is undefined");
    if (file.File.Length < 0)
      return BadRequest("File content is empty");
    ...
  }
}

FileModel:

public class FileModel
{
  public string Name { get; set; }
  public string Extension { get; set; }
  public string FolderPath { get; set; }
  public IFormFile File { get; set; }
}

И клиентский Axe ios вызов:

export function uploadFile(folderPath, data) {
  console.log("upLoadFile", folderPath, data);

  const formData = new FormData();
  formData.set('name', data.file);
  formData.set('extension', data.extension);
  formData.set('folderPath', folderPath);
  formData.append('file', data);

  return axios.post(
    "api/files",
    formData,
    { headers: { 'Content-Type': 'multipart/form-data}' }})
    //{ headers: { 'Content-Type': 'multipart/form-data; boundary=${form._boundary}' }})
    .then((response) => {
      console.log(response.data);
      console.log(response.status);
    })
    .catch((error) => {
      console.log(error);
    });
}

Я предполагаю проблема лежит где-то с типами данных, которые я отправляю? В частности, с типом FileModel s File IFormFile. Все идеи приветствуются!

Используемая версия Ax ios 0.19.2

1 Ответ

1 голос
/ 10 февраля 2020

Я считаю, что основная проблема была связана с типами данных с моей первоначальной попытки. Важно, чтобы данный data был в правильном формате / типе.

Правильное определение данных следующим образом помогло:

const file = new Blob([data.contents], { type: 'text/csv' });

const formData = new FormData();
formData.set('Name', data.file);
formData.set('Extension', data.extension);
formData.set('FolderPath', folderPath);
formData.append('File', file);

const requestConfig = {
    headers: {
    "Content-Type": "multipart/form-data"
  }
};

когда formData определено, как указано выше, следующий Ax ios POST работает без проблем или изменений в контроллере, [FromForm] работает как положено.

return axios.post(
  "api/files",
  formData,
  requestConfig)
.then((response) => {
  console.log(response.data);
})
.catch((error) => {
  console.log(error);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...