波斯马BOSSMA Information Technology

ASP.NET Core的坑之“Form key or value length limit 4194304 exceeded”

发布时间:2018年6月7日 / 分类:DOTNET / 8,308 次浏览 / 评论

作为一个优秀和完整的Web服务端框架,各种验证和安全机制是必须要考虑的,ASP.NET Core正是如此。

在提交表单的时候,报了这样一个错误:

Form key or value length limit 4194304 exceeded

仅从字面理解也大概能看出来是怎么回事,表单中的key或者value的长度超过限制了。

经常写.NET的程序应该想到解决办法:修改下默认设置。扒拉扒拉找到了设置的地方:

public void ConfigureServices(IServiceCollection services)
        {
            ...

            services.Configure<FormOptions>(options =>
            {
                options.ValueCountLimit = int.MaxValue;
                options.ValueLengthLimit = int.MaxValue;
                options.KeyLengthLimit = int.MaxValue;
                options.MultipartBodyLengthLimit = int.MaxValue;
                options.MultipartBoundaryLengthLimit = int.MaxValue;
            });

            ...
        }

就是这个FormOptions了,里边很多Limit,都设置成int.MaxValue。

聪明的你可能还会多想一下,为什么要有个限制呢?

这涉及到的是内存使用的问题,如果没有限制,内存可能就爆了,这显然不太安全。所以设置为int.MaxValue并不是一个好方案,需要按照实际情况来,给一个合适的最大值。

如果你还想了解更多细节,可以看看抛出这个异常时的处理逻辑,源代码在:

https://github.com/aspnet/HttpAbstractions/blob/dev/src/Microsoft.AspNetCore.WebUtilities/FormReader.cs

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自波斯马,原文地址《ASP.NET Core的坑之“Form key or value length limit 4194304 exceeded”

关键字:

建议订阅本站,及时阅读最新文章!
【上一篇】 【下一篇】

发表评论