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错误:"从origin[localhost]访问[localhost]的XMLHttpRequest已被cors策略阻止:请求的资源上不存在"Access Control Allow origin"标头。"从服务器返回。我还没有在IIS上尝试过,所以我在Kestrel本地遇到了这些问题。

我的配置服务如下所示:

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)]

但我仍然得到cors错误以上的文件28.6mb

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

如有任何帮助,我们将不胜感激。

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

我想再加一点。。。

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

<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(找到配置文件,右键单击系统托盘中的IISExpression图标,单击"显示所有应用程序",然后选择特定的站点/项目。

我希望这能帮助到别人,我为此耗费了好几个小时。

最新更新