Ошибка при попытке отправить файл из Angular 6 в ASP.NET Core Web Api - PullRequest
1 голос
/ 27 марта 2019

Я пытаюсь сделать POST-запрос с multipart / form-data из приложения Angular 6 в службу REST в ASP.NET Core, но у меня ошибка 500. Я перепробовал слишком много решений, но ничего не получалось. Я пытался выполнить запрос на Postman и получить ту же проблему, но я пробовал в другом программном обеспечении, называемом ARC (Advanced REST Client), и работает как чудо, и я понятия не имею, почему.

На стороне сервера я получил InvalidDataException: отсутствует граница типа контента. В моем проекте я тоже использую сваггер

вот мой код

Запрос в угловых:

public uploadPlanilha(planilha: File, idLote: number): Observable<Array<RequisicaoComposicao>>{
    let formData = new FormData();

    formData.append('arquivo', planilha, planilha.name);
    formData.append('idLote', idLote.toString());

    let httpHeaders = new HttpHeaders();
    httpHeaders = httpHeaders.set("Content-Type", "multipart/form-data");

    return this.httpClient.post<Array<RequisicaoComposicao>>(`${this.API_URL}requisicoes/upload`, formData, {
      headers: httpHeaders
    });
  }

Метод контроллера в Web Api

[HttpPost]
        [Route("upload")]
        [Consumes("multipart/form-data")]
        [DisableRequestSizeLimit]
        public ActionResult<List<RequisicaoComposicao>> PostPlanilhaRequisicoes([FromForm]ArquivoDto arquivoDto)
        {
            try
            {
                using (Stream arquivoPlanilha = arquivoDto.Arquivo.OpenReadStream())
                {
                    List<RequisicaoComposicao> requisicaoComposicoes = _composicaoGestor.Inserir(arquivoPlanilha, int.Parse(arquivoDto.IdLote));
                    return Ok(requisicaoComposicoes);
                }
            }
            catch (Exception)
            {
                return StatusCode(StatusCodes.Status500InternalServerError);
            }
        }

Класс ArquivoDto

public class ArquivoDto
        {
            public IFormFile Arquivo { get; set; }
            public string IdLote { get; set; }
        }

1 Ответ

0 голосов
/ 28 марта 2019

Удалите тег [FromForm], который вам не нужен.

В этой строке здесь: formData.append('arquivo', planilha, planilha.name);

измените его на formData.append('arquivo', planilha);

Я никогдаиспользовал его, поэтому я не думаю, что вам нужен эфир [Consumes("multipart/form-data")] атрибут.(если вы не используете что-то вроде swagger и не хотите сказать, что потребляет этот метод, сохраните его)

Я бы тоже убрал эту строку httpHeaders = httpHeaders.set("Accept", "multipart/form-data");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...