控制台:
要配置两个地方:
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>就不要执行,或者两块代码都用这个判断,
麻烦了点,有好的方法大家留言。