并发多部分/表单数据请求被.NET API拒绝

xhv8bpkk  于 12个月前  发布在  .NET
关注(0)|答案(1)|浏览(115)

我正在使用Angular +. NET实现一个多文件上传器。用户选择多个文件,Web应用程序向我的API发送多个发布请求。
沿着二进制文件,我将在表单数据请求中发送一些其他属性。但是只有二进制/文件在不同的请求中发生了变化。
出于某种原因,只有最后一个请求被接受,并导致成功上传。

我的端点只被最后一个请求命中一次:

[HttpPost("asset")]
[Consumes("multipart/form-data")]
[ProducesResponseType(typeof(BinaryResponse), StatusCodes.Status201Created)]
[ProducesResponseType(typeof(GenericResponse), StatusCodes.Status413RequestEntityTooLarge)]
[ProducesResponseType(typeof(GenericResponse), StatusCodes.Status400BadRequest)]
[ProducesResponseType(typeof(GenericResponse), StatusCodes.Status500InternalServerError)]
public async Task<IActionResult> UploadBinary([FromForm] IFormFile file, [FromForm] BinaryRequest binary)
{
   //...
}

Angular服务被调用了3次:

uploadFile(version: string, product: string, asset: Asset) : Observable<HttpEvent<BinaryResult>> {
  const formData: FormData = new FormData();
  formData.append('version', version);
  formData.append('file', asset.file);
  formData.append('operationalSystem', asset.operationalSystem);
  formData.append('architecture', asset.architecture);
  
  return super.postReporter<BinaryResult>('asset', formData);
}

//Base class:
protected postReporter<X>(sub: string, content: any) {
  return this.httpClient.post<X>(`${environment.apiUrl}/${this.base}/${sub}`, content, {
    reportProgress: true,
    observe: 'events',
  });
}

是否有任何配置,我可能会错过,使多个请求被接受一次?
与文件上传相关的唯一更改设置是:

builder.Services.Configure<KestrelServerOptions>(options =>
{
    options.Limits.MaxRequestBodySize = int.MaxValue;
});
nimxete2

nimxete21#

我在Startup.cs,.NET Core 3.1中使用此配置:

services.Configure<FormOptions>(x =>
        {
            x.ValueLengthLimit = int.MaxValue;
            x.MultipartBodyLengthLimit = int.MaxValue; // In case of multipart
        });

相关问题