• ASP.NET Core中如何调整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可以同时应用到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

  • 相关阅读:
    游戏中转轮抽奖的算法实现[转]
    前端的一份配置(备份)
    [转]Jquery通用开源框架之【ejq.js】
    【完整靠谱版】结合公司项目,仔细总结自己使用百度编辑器实现FTP上传的完整过程
    用Putty连接Linux
    使用Nginx的proxy_cache缓存功能取代Squid
    nginx for windows 配置多域名反向代理
    详细解析用Squid实现反向代理的方法
    用Squid和DNSPod打造自己的CDN详细教程
    WINDOWS下的squid
  • 原文地址:https://www.cnblogs.com/maxzhang1985/p/7607776.html
Copyright © 2020-2023  润新知