首页 > 解决方案 > webapi核心无法上传被cors策略阻止的大文件

问题描述

我正在尝试将大文件从 Angular 9.0 前端上传到 Web Api .net core 3.1 后端。我正在关注本教程https://code-maze.com/upload-files-dot-net-core-angular/。在默认的最大文件大小 28.6 mb 之前,这一切都完美无缺,一旦超过此文件大小,我会收到以下 cors 错误:'CORS 策略已阻止从源 [localhost] 访问 [localhost] 的 XMLHttpRequest:否请求的资源上存在“Access-Control-Allow-Origin”标头。从服务器返回。我还没有在 IIS 上尝试过,所以我在本地使用 Kestrel 解决了这些问题。

我的 ConfigureServices 如下所示:

 services.AddCors(options =>
  {
   options.AddPolicy("AllowLocalAngularWebClient",
    policy => policy.WithOrigins("http://localhost:4200").WithHeaders().AllowAnyHeader().AllowAnyMethod());
   });

我的配置如下所示:

app.UseCors("AllowLocalAngularWebClient");
 app.UseStaticFiles(new StaticFileOptions()
            {
                FileProvider = new PhysicalFileProvider
                      (Path.Combine(Directory.GetCurrentDirectory(), @"uploads")),
                RequestPath = new PathString("/uploads")
            });

我的控制器如下所示:

[EnableCors("AllowLocalAngularWebClient")]
[DisableRequestSizeLimit]

我遇到了一些博客说我需要配置红隼,所以我在 BuildWebHost 中尝试了这个:

.ConfigureKestrel((context, options) =>
                {
                    options.Limits.MaxRequestBodySize = 52428800; //or null for unlimited!
                })

同样在我的控制器上,我尝试了两种方法:

 [DisableRequestSizeLimit]

[RequestSizeLimit(52428800)]

但我仍然收到文件超过 28.6mb 的 cors 错误

我不知道这是 cors 错误还是本地 IIS / kestrel Visual Studio 错误。

任何帮助将不胜感激。

标签: angularasp.net-corefile-uploadcors

解决方案


我在剥离我的整个项目后发现了这个问题,并想分享这个,以防其他人有同样的问题。您需要将 launchSettings.json 中的 commandName 选项设置为“Project”,以便直接在命令行上使用 .NET CLI 执行它。如果 commandName 设置为“IISExpress”,则上传限制为 28.6 mb。


推荐阅读