项目中有一个通过WebApi接口上传视频文件的需要。之前在测试的时候,一直采用的只有8M多的文件,结果发布以后,需要上传一个近百M的视频文件。上传后,直接失败,接口没有任何返回。通过查找IIS的网站请求日志,看到了返回413的错误
413错误解决办法
1、修改IIS 网站的配置编辑器
在IIS管理器中,选中网站目录,打开配置编辑器。找到下面的目录。将 maxAllowedContentLength修改一下。默认是30000000,不到30M。这边修改成了200M。
2、修改网站Web.config配置文件
加入下面这段配置
<?xml version="1.0" encoding="utf-8"?> <configuration> <location path="." inheritInChildApplications="false"> <system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="dotnet" arguments=".\WebApi.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" /> <security> <requestFiltering> <requestLimits maxAllowedContentLength="209715200" /> </requestFiltering> </security> </system.webServer> </location> </configuration>
经过这两步的设置,这个时候再通过接口上传,就会返回错误 Request body too large
这两个步骤,因为当时都修改了,不确定是否只要设置Web.confgi文件就可以,还是都要设置。为了避免麻烦。就都设置了。
Request body too large 错误解决方法
1、修改Startup.cs
public void ConfigureServices(IServiceCollection services) { services.AddFxServices(); services.AddAutoMapper(); //解决文件上传Request body too large services.Configure<FormOptions>(x => { x.MultipartBodyLengthLimit = 209_715_200;//最大200M }); }
2、修改接口方法
加上 [DisableRequestSizeLimit]
这个时候将项目重新发布部署一下,低于200M的文件就可以正常上传了。
注意:上面的解决方法只适用于将.Net Core项目部署在IIS下。
如果是部署Linux系统下(参考其他博主的解决方法,具体没有进行测试论证,仅供参考)
需要在 Program.cs 添加如下代码
public static IWebHost BuildWebhost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseKestrel(options => { options.Limits.MaxRequestBodySize = 209715200; // 200M }) .Build();