一、前言

一般的情况下,我们都无需调用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可以同时应用到ControllerAction上,以禁用对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

原文地址:http://www.cnblogs.com/maxzhang1985/p/7607776.html

.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

ASP.NET Core中如何调整HTTP请求大小的几种方式相关推荐

  1. django中csrftoken跨站请求伪造的几种方式

    1.介绍 我们之前从前端给后端发送数据的时候,一直都是把setting中中间件里的的csrftoken这条给注释掉,其实这个主要起了一个对保护作用,以免恶意性数据的攻击.但是这样直接注释掉并不是理智型 ...

  2. ASP.NET Core中使用IOC三部曲(一.使用ASP.NET Core自带的IOC容器)

    前言 本文主要是详解一下在ASP.NET Core中,自带的IOC容器相关的使用方式和注入类型的生命周期.这里就不详细的赘述IOC是什么 以及DI是什么了.. emm..不懂的可以自行百度. 正文 今 ...

  3. 如何在 Asp.Net Core 中对请求进行限流

    译文链接:https://www.infoworld.com/article/3442946/how-to-implement-rate-limiting-in-aspnet-core.html 在应 ...

  4. ASP.NET Core 中使用IHttpClientFactory发出HTTP请求

    1.HttpClient类使用存在的问题 HttpClient类的使用所存在的问题,百度搜索的文章一大堆,好多都是单纯文字描述,让人感觉不太好理解,为了更好理解HttpClient使用存在的问题,下面 ...

  5. Asp.Net Core 中IdentityServer4 授权中心之应用实战

    一.前言 查阅了大多数相关资料,搜索到的IdentityServer4 的应用文章大多是比较简单并且多是翻译官网的文档编写的,我这里在 Asp.Net Core 中IdentityServer4 的应 ...

  6. ASP.NET Core中Ocelot的使用:基于服务发现的负载均衡

    本系列相关文章: <ASP.NET Core中Ocelot的使用:API网关的应用> <ASP.NET Core中Ocelot的使用:基于Spring Clound Netflix ...

  7. ASP.NET Core中使用GraphQL - 第二章 中间件

    前文:ASP.NET Core中使用GraphQL - 第一章 Hello World 中间件 如果你熟悉ASP.NET Core的中间件,你可能会注意到之前的博客中我们已经使用了一个中间件, 这个中 ...

  8. ASP.NET Core Web APi获取原始请求内容

    前言 我们讲过ASP.NET Core Web APi路由绑定,本节我们来讲讲如何获取客户端请求过来的内容. ASP.NET Core Web APi捕获Request.Body内容 [HttpPos ...

  9. 在asp.net core中使用托管服务实现后台任务

    在业务场景中经常需要后台服务不停的或定时处理一些任务,这些任务是不需要及时响应请求的. 在 asp.net中会使用windows服务来处理. 在 asp.net core中,可以使用托管服务来实现,托 ...

最新文章

  1. python基础数据实例_Python基本数据类型及实例详解
  2. bootstrap 时间日期日历控件(datetimepicker)附效果图
  3. 数据库授予用户增删改查的权限的语句_软件测试之浅谈数据库技术概述
  4. 每日一皮:如何用一句话让领导和同事都尴尬至极?
  5. Python总结:Python基础(一)
  6. 【软件测试】软件测试学习笔记(三)
  7. 简单说说Java SE、Java EE、Java ME三者之间的区别
  8. JAVA计算机毕业设计多媒体素材管理系统Mybatis+系统+数据库+调试部署
  9. 给pdf加水印的方法
  10. Linux Thermal Framework分析及实施
  11. 传送网发展与各种网元的功能
  12. 微信小程序渐变色按钮,好看的小程序按钮样式
  13. Java用于取得当前日期相对应的月初,月末,季初,季末,年初,年末时间
  14. 深度学习 week1 采访部分补充
  15. DPDK入门(环境搭建以及小demo)
  16. 6-4 学生成绩链表处理 (20分) 本题要求实现两个函数,一个将输入的学生成绩组织成单向链表;另一个将成绩低于某分数线的学生结点从链表中删除。 函数接口定义: ```cpp struct stu
  17. [MFC] 高仿Flappy bird 桌面版
  18. 有了这些中高端面试专题-大厂还会远吗?妈妈再也不用担心我找工作了!
  19. 无方向盘汽车、全球首个航天大模型、开物平台升级:百度世界AI成果展示
  20. Dw实现并排显示窗口

热门文章

  1. 辨别真假数据科学家必备手册:深度学习45个基础问题(附答案)
  2. 使用ArcGIS Server发布我们的数据
  3. IOS使用Auto Layout中的VFL适配
  4. Mybatis批量更新转
  5. Cus系统beta1.2发布
  6. Discuz添加自定义模板广告
  7. MS-SQLSERVER--错用了LEN()函数
  8. 技术分享 | CodeReview主要Review什么?
  9. Magicodes.IE 2.5.6.2发布
  10. 国内最大.NET平台重金招募中 你竟然还不知道?