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

当上传大图片导致前端报413错误时,可以通过修改Web.config配置文件和调整.NETCore服务设置来增加请求体大小限制。在IIS环境下,需在Web.config中设置requestLimits.maxAllowedContentLength。在代码层面,可以在Startup.cs中配置FormOptions和接口方法上使用[DisableRequestSizeLimit]。对于Linux部署,需在Program.cs中修改Kestrel服务器的MaxRequestBodySize。

错误描述

图片比较大时,在前端上传就报413错误。根本到不了后端。

在网上看到这个文章比较有用。

https://blog.youkuaiyun.com/wstever/article/details/128870742

1、修改网站Web.config配置文件

加入下面这段配置

<?xmlversion="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>

经过上面配置,本地上传成功,但是其他机器上报 Requestbody too large

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();

<think>我们正在解决IIS中出现的413错误(请求实体过大)问题。根据提供的引用,有几种不同的解决方法,主要涉及修改IIS配置或Nginx配置(如果使用了Nginx反向代理)。由于用户明确提到IIS,我们将重点放在IIS解决方案上。引用[1]提到修改metabase.xml文件,需要停止IISAdminService服务,然后修改ASPMaxRequestEntityAllowed的值,再重启服务。引用[2][3]则提到在web.config中修改配置,包括`<httpRuntime>`的maxRequestLength属性`<requestFiltering>`的maxAllowedContentLength属性。引用[4]提到如果是Nginx引起的,需要修改Nginx配置(client_max_body_size等),但用户的问题是IIS,所以这个可能不是直接相关,除非IIS前面有Nginx代理。因此,解决方案主要分为两个部分:1.修改web.config文件(推荐方法,因为修改metabase.xml可能不适用于所有IIS版本,且web.config更易于管理)。2.如果前端有Nginx代理,还需要修改Nginx配置。由于用户问题明确是IIS,我们先提供IIS的解决方案,然后提示如果有反向代理的情况。具体步骤:方法一:修改web.config(适用于IIS7及以上)在网站根目录的web.config文件中(如果没有则创建),在<system.web><system.webServer>节点下分别设置:-在<system.web>下的<httpRuntime>中设置maxRequestLength(单位是KB)-在<system.webServer>下的<security><requestFiltering>中设置<requestLimits>的maxAllowedContentLength(单位是字节)例如,要允许上传400MB的文件,可以这样设置:maxRequestLength=419430(因为400MB=400*1024KB=409600KB,但注意最大可设值,通常可以设得很大)实际上,maxRequestLength的最大值不能超过Int.MaxValue(2147483647)KB,但实际中我们根据需要设置。但注意:maxRequestLength的单位是KB,maxAllowedContentLength的单位是字节。所以400MB=400*1024*1024=419430400字节。示例配置如下(参考引用[2]):```xml<configuration><system.web><httpRuntimemaxRequestLength="419430"/></system.web><system.webServer><security><requestFiltering><requestLimitsmaxAllowedContentLength="419430400"/></requestFiltering></security></system.webServer></configuration>```方法二:修改metabase.xml(适用于旧版IIS,或者方法一无效时)1.停止IISAdminService服务(可以在服务管理器中停止,或者以管理员身份运行命令:netstopiisadmin)2.找到文件:%windir%\system32\inetsrv\metabase.xml3.找到节点:<IIsWebService...>,在里面添加或修改属性:AspMaxRequestEntityAllowed例如:AspMaxRequestEntityAllowed="419430400"4.保存文件,然后启动IISAdminService服务(netstartiisadmin)注意:在修改metabase.xml之前,请备份该文件。另外,如果应用程序池是集成模式,则修改<system.webServer>下的配置;如果是经典模式,则修改<system.web>下的配置。但是为了确保,通常两者都设置。此外,如果IIS前面有Nginx反向代理,那么还需要在Nginx的配置中增加client_max_body_size设置,例如:在http、server或location块中添加:client_max_body_size400M;最后,修改配置后需要重启IIS(可以在命令行运行iisreset,或者在IIS管理器中重启站点/应用程序池)。总结步骤:1.创建或修改web.config,添加上述配置(推荐先尝试这个方法)。2.如果无效,尝试修改metabase.xml(注意备份)。3.检查是否有反向代理(如Nginx),并相应修改其配置。4.重启IIS。注意:maxRequestLengthmaxAllowedContentLength的值要匹配,并且根据实际需要设置大小。相关问题:1.如何确定IIS应用程序池使用的是经典模式还是集成模式?2.修改web.config后,是否需要重启IIS?3.除了413错误,上传大文件还可能遇到哪些错误?</think>### IIS 413 Request Entity Too Large 解决方案 出现 **413 Request Entity Too Large** 错误是由于 IIS 限制了客户端请求的大小(通常发生在大文件上传时)。以下是三种解决方案,根据您的 IIS 配置环境选择: --- #### **方案一:修改 `web.config` 文件(推荐)** 在网站根目录的 `web.config` 文件中添加以下配置: ```xml <configuration> <system.web> <!-- 单位:KB(400MB ≈ 400*1024KB = 409600KB) --> <httpRuntime maxRequestLength="409600" /> </system.web> <system.webServer> <security> <requestFiltering> <!-- 单位:字节(400MB = 400*1024*1024 ≈ 419430400 字节) --> <requestLimits maxAllowedContentLength="419430400" /> </requestFiltering> </security> </system.webServer> </configuration> ``` **关键参数说明**: - `maxRequestLength`:控制 ASP.NET 请求大小(单位 **KB**) - `maxAllowedContentLength`:控制 IIS 请求主体大小(单位 **字节**) **注意**:两个值需同时设置,且需匹配(如 400MB 需同时设为 `409600 KB` `419430400 字节`)。修改后**无需重启 IIS**,配置自动生效[^2][^3]。 --- #### **方案二:修改 IIS 元数据库文件(备用)** 若方案一无效,可修改 `metabase.xml`: 1. **停止 IIS 服务**: ```bash net stop iisadmin /y ``` 2. 打开文件: `%windir%\system32\inetsrv\metabase.xml` 3. 在 `<IIsWebService>` 节点内添加: ```xml <IIsWebService ...> <AspMaxRequestEntityAllowed>419430400</AspMaxRequestEntityAllowed> </IIsWebService> ``` 4. **重启 IIS 服务**: ```bash net start iisadmin ``` > ⚠️ 操作前请备份文件,此方法适用于旧版 IIS[^1]。 --- #### **方案三:检查反向代理设置(如使用 Nginx)** 若 IIS 前有 Nginx 代理,需在 Nginx 配置中增加: ```nginx http { client_max_body_size 400M; # 允许请求体最大为 400MB } ``` 修改后重启 Nginx: ```bash nginx -s reload ``` > 💡 此错误可能因 Nginx 拦截请求导致(错误日志中无记录)[^4]。 --- #### **验证与注意事项** 1. **重启生效**: - 修改 `web.config` 后刷新网站即可 - 修改 `metabase.xml` 或 Nginx 配置需重启服务 2. **权限要求**: - 操作需管理员权限 3. **错误排查**: - 检查应用程序池模式(集成模式需配置 `<system.webServer>`) - 确保 `maxRequestLength` `maxAllowedContentLength` 单位正确 - 查看 Windows 事件查看器获取详细错误日志 > 📌 推荐优先使用 **方案一**,覆盖大多数场景。若问题持续,可结合方案二三排查。 --- ### 相关问题 1. 如何区分 `413 Request Entity Too Large` 错误是由 IIS 还是 Nginx 引起的? 2. 修改 `web.config` 后 IIS 报错 500.19 如何解决? 3.413 错误外,大文件上传还有哪些常见问题及解决方案? [^1]: 上传文件报413 Request Entity Too Large错误解决办法 [^2]: IIS上传文件报413 Request Entity Too Large [^3]: IIS 413 Request Entity Too Large 413Payload Too Large 的问题 [^4]: 大文件上传报错(413 Request Entity Too Large
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值