ASP.NET Core中调整HTTP请求大小的几种方法详解
 更新时间:2017年12月30日 11:40:19   作者:YOYOFx  

这篇文章主要给大家介绍了关于在ASP.NET Core中如何调整HTTP请求大小的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

一、前言

之所以称ASP.NET Core是一个Web开发平台,源于它具有一个极具扩展性的请求处理管道,我们可以通过这个管道的定制来满足各种场景下的HTTP处理需求。ASP. NET Core应用的很多特性,比如路由、认证、会话、缓存等,也同时定制消息处理管道来实现的。我们甚至可以通过管道定制在ASP.NET Core平台上创建我们自己的Web框架,实际上MVC和SingalR这两个重要的Web框架也是采用这样的方式创建的。
HTTP协议自身的特性决定了任何一个Web应用的工作方式都是监听、接收并处理HTTP请求,并在最终对请求予以响应,HTTP请求处理是管道式设计典型的应用场景。我们根据HTTP请求的处理流程定制出一个消息处理管道,让接收到的HTTP请求消息想水一样流入这个管道,组成这个管道的各个环节一次对它作相应的处理。处理的结果同样转变成消息逆向流入这个管道进行处理,并最终转变成回复给客户端的HTTP响应。
一般的情况下,我们都无需调用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;
}

总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对华域联盟的支持。

您可能感兴趣的文章:如何ASP.NET Core Razor中处理Ajax请求Asp.Net Core控制器如何接收原始请求正文内容详解使用NLog给Asp.Net Core做请求监控的方法ASP.NET Core中间件计算Http请求时间示例详解ASP.NET Core利用UrlFirewall对请求进行过滤的方法示例ASP.NET Core MVC获取请求的参数方法示例

asp.net
core
http请求

相关文章
使用Visual Studio 2017作为Linux C++开发工具这篇文章主要为大家详细介绍了使用Visual Studio 2017作为Linux C++开发工具的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-03-03
将DataRow转成指定类型的类,并返回这个类的对象(带值)由于实际需要 将DataRow转成指定类型的类,并返回这个类的对象(带值) ,实现方法看下面的代码。 2008-04-04
详解.NET中string与StringBuilder在字符串拼接功能上的比较string与StringBuilder的在字符串拼接时执行效率上有差异,这篇文章主要介绍了详解.NET中string与StringBuilder在字符串拼接功能上的比较,感兴趣的小伙伴们可以参考一下 2018-11-11
.NET CORE HttpClient的使用方法这篇文章主要给大家介绍了关于.NET CORE HttpClient的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者使用.NET CORE具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧 2020-07-07
asp.net 文件下载实现代码asp.net下实现文件下载的代码。大家可以看下,主要包括文件名等操作。 2009-04-04
asp.net下常用的加密算法MD5、SHA-1应用代码在进行软件开发的过程中,为了提高系统的安全性能,经常需要进行敏感信息的加密处理。特别是在密码储存、文件传输、页面传值等方面,对信息进行加密显得十分必要。下面介绍我们常用的两种加密算法MD5、SHA1。
2008-09-09
ASP.NET实现将word文档转换成pdf的方法这篇文章主要介绍了ASP.NET实现将word文档转换成pdf的方法,包含了两种实现方法进行比对分析,非常具有实用价值,需要的朋友可以参考下 2014-10-10
详解ASP.NET MVC之下拉框绑定四种方式这篇文章主要介绍了详解ASP.NET MVC之下拉框绑定四种方式,详细的讲诉了4种方法,具有一定的参考价值,有需要的可以了解一下。 2016-12-12
Asp.net Mvc表单验证气泡提示效果这篇文章主要为大家详细介绍了Asp.net Mvc表单验证气泡提示效果的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-09-09
asp.net DropDownList自定义控件,让你的分类更清晰记得上次做论坛,一个功能就是合并2个子板块的主题,用级联的2个DropDownList也是可以完成,那样我们要合并的时候总共就有4个DropDownList控件,觉得界面友好 2011-10-10

最新评论

声明:本站(华域联盟www.cnhackhy.com)所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。