ASP.NET Core中如何调整HTTP请求大小的几种方式
2017-09-28 17:43
645 查看
一、前言
一般的情况下,我们都无需调用HTTP请求的大小,只有在上传一些大文件,或者使用HTTP协议写入较大的值时(如调用WebService)才可能会调用HTTP最大请求值。在ASP.NET Core 2.0中,它的两个宿主服务器Kestrel和HttpSys默认的HTTP最大请求大小为30MB (~28.6 MiB)。
如果当HTTP请求值大于这个默认配置时,在执行Request.Body.ReadAsync方法时,就会引发IOException异常。如果这个异常未被捕获,在Kestrel服务器中输出HTTP状态码413(Request Entity Too Large), 而在HttpSys 中的HTTP状态码将是500(Internal Server Error)。
二、解决方案
在ASP.NET Core中这个配置可以基于全局和每次请求进行配置。1.MVC的解决方案
MVC Core中为我们提供了两种特性配置请求大小:RequestSizeLimit Attribute,对每个Action的请求大小进行配置。如下调整MyAction的请求大小值为100,000,000 字节.
[HttpPost] [RequestSizeLimit(100_000_000)] public IActionResult MyAction([FromBody] MyViewModel data) { }
DisableRequestSizeLimit Attribute可以同时应用到Controller和Action上,以禁用对HTTP请求的大小限制,也是说设置为无限制。
[HttpPost] [DisableRequestSizeLimit] public IActionResult MyAction([FromBody] MyViewModel data) { }
2.请求上下文的解决方案
这个方案是一个全局配置方案,会影响到每个请求,当然也可以通过一些灵活的配置对单个请求进行修改,它通过IHttpMaxRequestBodySizeFeature 特征进行配置。如下在HttpContext中取得,当然也可以在ApplicationServices的IOC中获取。HttpContext.Features.Get<IHttpMaxRequestBodySizeFeature>().MaxRequestBodySize = 100_000_000;
IHttpMaxRequestBodySizeFeature特征的MaxRequestBodySize属性是Nullable< long >类型,当设置为null时,类拟于MVC中的[DisableRequestSizeLimit]]。IsReadOnly属性说明此时上下文中的请求大小是否可以修改。
3.全局配置解决方案
通过两个宿主服务器Kestrel和HttpSys配置对请求大小进行修改,规则与前两种方案相同。.UseKestrel(options => { options.Limits.MaxRequestBodySize = null; }
.UseHttpSys(options => { options.MaxRequestBodySize = 100_000_000; }
推广
GitHub:https://github.com/maxzhang1985/YOYOFx 如果觉还可以请Star下, 欢迎一起交流。.NET Core 开源学习群:214741894
相关文章推荐
- ASP.NET Core中如何调整HTTP请求大小的几种方式
- ASP.NET Core中调整HTTP请求大小的几种方法详解
- ASP.NET Core管道深度剖析(3):管道是如何处理HTTP请求的?
- asp.net中如何引用js的几种方式
- 你需要知道的这几种 asp.net core 修改默认端口的方式
- 列举ASP.NET 页面之间传递值的几种方式
- 一起谈.NET技术,如何让ASP.NET默认的资源编程方式支持非.ResX资源存储
- 学习笔记18 复习asp.net页面传参数的几种方式
- asp.net C# 弹出对话框几种方式和区别比较
- ASP.NET页面之间传递值的几种方式
- ASP.NET Core应用中如何记录和查看日志
- ASP.NET中页面之间传递值的几种方式整理
- ASP.NET中页面传值共有这么几种方式
- 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获
- asp.net几种安全验证方式
- ASP.NET中页面传值的几种方式
- asp.net不同页面传值的几种方式
- 如何:确定调用 ASP.NET 网页的方式 [转帖]
- Asp.net 访问数据库的几种方式
- ASP.NET页面之间传递值的几种方式