簡體   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