通常的狀況下,咱們都無需調用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