C# 尝试将文件从Angular 6发布到ASP.NET核心Web Api时出错
我正在尝试使用多部分/表单数据从Angular 6应用程序向ASP.NET Core中的REST服务发出POST请求,但出现错误500。我尝试了太多的解决方案,但都不奏效。我试图在Postman上执行请求,但也遇到了同样的问题,但我尝试了其他名为ARC(AdvancedRESTClient)的软件,效果非常好,我不知道为什么 在服务器端,我发现InvalidDataException:缺少内容类型边界。在我的项目中,我也在大摇大摆 这是我的密码 以角度表示的请求:C# 尝试将文件从Angular 6发布到ASP.NET核心Web Api时出错,c#,angular,asp.net-core,asp.net-core-webapi,C#,Angular,Asp.net Core,Asp.net Core Webapi,我正在尝试使用多部分/表单数据从Angular 6应用程序向ASP.NET Core中的REST服务发出POST请求,但出现错误500。我尝试了太多的解决方案,但都不奏效。我试图在Postman上执行请求,但也遇到了同样的问题,但我尝试了其他名为ARC(AdvancedRESTClient)的软件,效果非常好,我不知道为什么 在服务器端,我发现InvalidDataException:缺少内容类型边界。在我的项目中,我也在大摇大摆 这是我的密码 以角度表示的请求: public uploadPl
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
});
}
删除不需要的
[FromForm]
标记
在这一行:
formData.append('arquivo',planilha,planilha.name)代码>
将其更改为formData.append('arquivo',planilha)代码>
我从未使用过它,因此我认为您不需要[Consumes(“multipart/formdata”)]
属性。(除非你使用的是招摇过市之类的东西,并且你想告诉它这种方法消耗了什么,那么就保留它)
我还要删除这一行httpHeaders=httpHeaders.set(“接受”,“多部分/表单数据”)代码>我使用AngularJS+ASP.NET Core 2.1,发现了相同的错误-->System.IO.InvalidDataException:缺少内容类型边界
我的解决方案是在http请求前端设置'Content-Type:undefined'
。我在StackOverflow的某个地方读到过这篇文章,如果有用的话,你可以试一试。我使用的是招摇过市。我删除了您建议的代码,但仍然不起作用。请尝试删除httpHeaders=httpHeaders.set(“内容类型”、“多部分/表单数据”)代码>行。我也试过了。现在,我得到错误500。在后端,错误为:System.IO.InvalidDataException:缺少内容类型boundary@ViníciusdaCruzMaia检查我上面的注释HttpHeaders
是不可变的,您需要像let-HttpHeaders=new-HttpHeaders().set(“内容类型”,“多部分/表单数据”).set(“接受”,“多部分/表单数据”)
否则,每次调用set
时,都会返回HttpHeaders
的新实例,并覆盖以前的头。这就是为什么您无法在服务器上获取内容类型
标题的原因。我更改了此标题,但仍然无法工作。我尝试在标题上使用内容类型,也尝试在没有此参数的情况下使用,但任何操作都有效。尝试使用它,如让httpHeaders=new httpHeaders()。设置(“内容类型”,“多部分/表单数据”)
,则无法重新分配httpHeaders变量。如果使用的是[FromForm]
那么内容类型应该是application/x-www-url-formencoded
,但是如果您只想发布文件,那么请删除[FromForm]
,并使用(IFormFile arquivoDto)
作为参数,在这种情况下,内容类型应该是多部分/表单数据
[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);
}
}
public class ArquivoDto
{
public IFormFile Arquivo { get; set; }
public string IdLote { get; set; }
}