asp.net core 3.0 解除文件上传大小限制,500.30、413、api-post-form方法拿不到参数 解决方案

控制台:

要配置两个地方:

1、Program.cs:

此处会导致IIS模式下500.30错误,IIS模式下要删除

当然只要是服务器错误都会引起500.30,如果排除是这里的问题

可以在[控制面板-管理工具-事件查看器-Windows日志-应用程序-错误]中查看堆栈

    public class Program
    {
        public static void Main(string[] args)
        => CreateHostBuilder(args).Build().Run();

        public static IHostBuilder CreateHostBuilder(string[] args)
        => Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder
        => webBuilder.UseStartup<Startup>()
        .UseKestrel(options =>
        {
            options.Limits.MaxRequestBodySize = long.MaxValue;
            options.Limits.MaxRequestBufferSize = long.MaxValue;
            options.Limits.MaxRequestLineSize = int.MaxValue;
        }));
    }

2、Startup.cs .ConfigureServices:添加

此处会导致IIS模式下api.Request.Form获取失败,IIS模式下要删除

            //此处会导致IIS模式下api.Request.Form获取失败
            services.Configure<FormOptions>(options =>
            {
                options.BufferBodyLengthLimit = long.MaxValue;
                options.KeyLengthLimit = int.MaxValue;
                options.MultipartBodyLengthLimit = long.MaxValue;
                options.MultipartBoundaryLengthLimit = int.MaxValue;
                options.ValueCountLimit = int.MaxValue;
                options.ValueLengthLimit = int.MaxValue;
            });

IIS:

同样要配置两个地方:

1、api添加特性[DisableRequestSizeLimit]

    [Route("api/[controller]/[action]")]
    public class FileController : ControllerBase
    {
        [HttpPost]
        [DisableRequestSizeLimit]
        public IActionResult Upload(IFormFile file)

2、添加web.config文件

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="2147483647" />
      </requestFiltering>
    </security>
  </system.webServer>
</configuration>

拓展:有没有一种兼容写法呢?

有的

webBuilder.UseIIS()可以避免.UseKestrel(...)报错,但是services.Configure<FormOptions>的问题没有解决

 public static bool IsIIS = Process.GetCurrentProcess().ProcessName.ToLower().Contains("iis", "w3wp");

用这个判断环境,如果是IIS,services.Configure<FormOptions>就不要执行,或者两块代码都用这个判断,

麻烦了点,有好的方法大家留言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上海好程序员

给上海好程序员加个鸡腿!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值