繁体   English   中英

尝试将文件从 Angular 6 发布到 ASP.NET Core Web Api 时出错

[英]Error on try to post file from Angular 6 to ASP.NET Core Web Api

我正在尝试使用 multipart/form-data 从 Angular 6 应用程序向 ASP.NET Core 中的 REST 服务执行 POST 请求,但出现错误 500。我尝试了太多解决方案,但没有任何效果。 我试图在 Postman 上执行请求并遇到同样的问题,但我在其他名为 ARC(高级 REST 客户端)的软件中尝试过,并且效果很好,但我不知道为什么。

在服务器端,我收到 InvalidDataException: Missing content-type boundary。 在我的项目中,我也在使用 swagger

这是我的代码

角度请求:

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; }
        }

删除您不需要的[FromForm]标签。

在这一行: formData.append('arquivo', planilha, planilha.name);

将其更改为formData.append('arquivo', planilha);

我从未使用过它,因此我认为您不需要[Consumes("multipart/form-data")]属性以太。 (除非你正在使用像 swagger 这样的东西,并且你想告诉它这个方法正在消耗什么然后保留它)

我也会删除这一行httpHeaders = httpHeaders.set("Accept", "multipart/form-data");

我使用 AngularJS + ASP.NET Core 2.1 并发现相同的错误 --> System.IO.InvalidDataException: Missing content-type boundary

我的解决方案是在 http 请求前端设置'Content-Type: undefined' 我在 StackOverflow 的某个地方读到过,如果有帮助,您可以快速尝试一下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM