Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试将文件从Angular 6发布到ASP.NET核心Web Api时出错_C#_Angular_Asp.net Core_Asp.net Core Webapi - Fatal编程技术网

C# 尝试将文件从Angular 6发布到ASP.NET核心Web Api时出错

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

我正在尝试使用多部分/表单数据从Angular 6应用程序向ASP.NET Core中的REST服务发出POST请求,但出现错误500。我尝试了太多的解决方案,但都不奏效。我试图在Postman上执行请求,但也遇到了同样的问题,但我尝试了其他名为ARC(AdvancedRESTClient)的软件,效果非常好,我不知道为什么

在服务器端,我发现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
    });
  }

删除不需要的
[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; }
        }