IIS .Net Core 413错误和Request body too large解决办法

项目中有一个通过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();

 

posted @ 2020-12-10 15:57  leoxuan  阅读(4667)  评论(1编辑  收藏  举报