ASP.NET Core MVC 2上传大二进制数据报错,求解决方法
解决ASP.NET Core MVC 2中上传大尺寸二进制数据的Kestrel异常问题
这个问题我之前处理过,核心原因就是Kestrel服务器默认的请求体大小限制在作怪!ASP.NET Core 2.x里Kestrel对单个请求的体大小有默认上限,你的22MB文件没超过这个阈值所以正常,38MB刚好触发了限制,就抛出了Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException。
下面给你几种可行的解决办法,按需选择:
1. 全局配置Kestrel的最大请求体大小
方式一:通过代码配置
在项目的Program.cs文件中,修改BuildWebHost方法,添加Kestrel的限制配置:
public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseKestrel(options => { // 这里设置为50MB(单位是字节,50*1024*1024=52428800),你可以根据需求调整 options.Limits.MaxRequestBodySize = 52428800; }) .UseStartup<Startup>() .Build();
方式二:通过配置文件设置
打开appsettings.json,添加Kestrel的限制项:
{ "Kestrel": { "Limits": { "MaxRequestBodySize": 52428800 } } }
2. 针对单个控制器动作设置限制
如果只是这个上传接口需要放宽限制,不想全局调整,可以给你的动作方法加上[RequestSizeLimit]特性:
[HttpPost] [RequestSizeLimit(52428800)] // 同样设置为50MB,按需修改 public async Task<IActionResult> RawBinaryDataManual() { using (var ms = new MemoryStream()) { await Request.Body.CopyToAsync(ms); var bytes = ms.ToArray(); return StatusCode((int) HttpStatusCode.OK); } }
3. IIS托管额外配置(如果用IIS部署)
如果你的项目是部署在IIS上的,除了上面的配置,还需要在web.config里添加请求长度限制:
<system.webServer> <security> <requestFiltering> <!-- 单位为字节,这里对应50MB --> <requestLimits maxAllowedContentLength="52428800" /> </requestFiltering> </security> </system.webServer>
调整完这些配置后,再上传38MB的文件就不会再触发异常了。
内容的提问来源于stack exchange,提问作者Andrey Bushman
相关产品推荐
相关产品推荐

