webapi核心无法上传被cors策略阻止的大文件

时间:2020-03-10 12:36:58

标签: angular asp.net-core file-upload 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]

我遇到过一些博客,说我需要配置kestrel,因此我在BuildWebHost中尝试过:

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

我在控制器上也尝试了两种方法:

 [DisableRequestSizeLimit]

[RequestSizeLimit(52428800)]

但是对于28.6mb以上的文件,我仍然出现cors错误

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

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我想为此添加更多...

我的解决方案是更新IISExpress配置,将以下行添加到IISExpress配置文件中:

  <requestFiltering>
    <requestLimits maxAllowedContentLength="500000000"></requestLimits>
    <fileExtensions allowUnlisted="true" applyToWebDAV="true">

关键在于:

<requestLimits maxAllowedContentLength="500000000"></requestLimits>

对于我来说,要更新的配置文件位于C:\ Users \ USER_NAME \ source \ repos \ PROJECT_NAME> .vs \ PROJECT_NAME \ config \ applicationhost.config

您可以通过启动项目(运行IISExpress)找到配置文件,右键单击系统任务栏中的IISExpress图标,单击“显示所有应用程序”,然后选择您的特定站点/项目。

我希望这对某人有帮助,我为此花了几个小时。