c# - 尝试将文件从 Angular 6 发布到 ASP.NET Core Web Api 时出错
问题描述
我正在尝试使用 Angular 6 应用程序中的 multipart/form-data 向 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")]
属性 ether。(除非你使用像 swagger 这样的东西,并且你想告诉它这个方法消耗了什么然后保留它)
我也会删除这条线httpHeaders = httpHeaders.set("Accept", "multipart/form-data");
推荐阅读
- javascript - 如何防止 Sentry 在浏览器中报告 javascript 错误?
- ios - 在 ARKit 中,如何在不拉伸以填充帧的情况下将视频裁剪为锚点大小?
- django - 无法更新自定义用户 (AbstractUser)
- python - 分数代码无法计算具有相同值的分数的差异
- parsing - 将 CKY 表转换为解析树
- stata - 残余结构冲击状态 (SVAR)
- ios - 如何在原生 iOS 应用中打开 Facebook 页面
- react-native - 如何防止设备缩放级别对我的应用程序产生影响?
- python - 我怎样才能提高地形生成器的性能我得到 40 FPS
- json - 使用 JQ 合并两个 Json 文件