通常的状况下,咱们都无需调用HTTP请求的大小,只有在上传一些大文件,或者使用HTTP协议写入较大的值时(如调用WebService)才可能会调用HTTP最大请求值。git
在ASP.NET Core 2.0中,它的两个宿主服务器Kestrel和HttpSys默认的HTTP最大请求大小为30MB (~28.6 MiB)。github
若是当HTTP请求值大于这个默认配置时,在执行Request.Body.ReadAsync方法时,就会引起IOException异常。若是这个异常未被捕获,在Kestrel服务器中输出HTTP状态码413(Request Entity Too Large), 而在HttpSys 中的HTTP状态码将是500(Internal Server Error)。服务器
在ASP.NET Core中这个配置能够基于全局和每次请求进行配置。mvc
MVC Core中为咱们提供了两种特性配置请求大小:学习
RequestSizeLimit Attribute,对每一个Action的请求大小进行配置。以下调整MyAction的请求大小值为100,000,000 字节.code
[HttpPost] [RequestSizeLimit(100_000_000)] public IActionResult MyAction([FromBody] MyViewModel data) { }
DisableRequestSizeLimit Attribute能够同时应用到Controller和Action上,以禁用对HTTP请求的大小限制,也是说设置为无限制。get
[HttpPost] [DisableRequestSizeLimit] public IActionResult MyAction([FromBody] MyViewModel data) { }
这个方案是一个全局配置方案,会影响到每一个请求,固然也能够经过一些灵活的配置对单个请求进行修改,它经过IHttpMaxRequestBodySizeFeature 特征进行配置。以下在HttpContext中取得,固然也能够在ApplicationServices的IOC中获取。it
HttpContext.Features.Get<IHttpMaxRequestBodySizeFeature>().MaxRequestBodySize = 100_000_000;
IHttpMaxRequestBodySizeFeature特征的MaxRequestBodySize属性是Nullable< long >类型,当设置为null时,类拟于MVC中的[DisableRequestSizeLimit]]。IsReadOnly属性说明此时上下文中的请求大小是否能够修改。io
经过两个宿主服务器Kestrel和HttpSys配置对请求大小进行修改,规则与前两种方案相同。class
.UseKestrel(options => { options.Limits.MaxRequestBodySize = null; }
.UseHttpSys(options => { options.MaxRequestBodySize = 100_000_000; }
GitHub:https://github.com/maxzhang1985/YOYOFx 若是觉还能够请Star下, 欢迎一块儿交流。
.NET Core 开源学习群:214741894