欢迎来到代码驿站!

.NET代码

当前位置:首页 > 软件编程 > .NET代码

ASP.NET Core中调整HTTP请求大小的几种方法详解

时间:2020-12-11 20:55:09|栏目:.NET代码|点击:

一、前言

之所以称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简单好用功能齐全图片上传工具类(水印、缩略图、裁剪等)

栏    目:.NET代码

下一篇:C#入门之checked和unchecked的区别实例解析

本文标题:ASP.NET Core中调整HTTP请求大小的几种方法详解

本文地址:http://www.codeinn.net/misctech/31624.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有