【APIM】分享APIM策略用于检查请求实体(Request Body Size)大于50MB直接返回提示信息

简介: 在使用APIM服务时,上传大文件可能影响性能。可通过APIM策略监测请求体大小,若超过50MB,则返回413错误。具体实现包括获取Content-Length、使用choose判断大小,并通过return-response返回提示信息。

问题描述

使用APIM服务,当遇见上传文件的请求时,需要考虑大文件对APIM性能的影响。

所以,是否可以使用APIM策略来监测请求body大小,如果超过50MB,就返回413 Payload too Large呢?

 

问题解答

当然可以。实现思路如下:

1:  在API的Policy中,在Inbound中获取请求的Size(context.Request.Headers["Content-Length"][0])并保存为一个参数bodySize

2:  使用choose 语句来判断bodySize小于 50MB ( 50 * 1024 * 1024 = 52428800 bytes), 小于则继续。

3:  如果大于了50MB,就使用 return-response 返回413并添加提示信息

 

示例策略如下:

<policies>
    <inbound>
        <base />
        <set-variable name="bodySize" value="@(context.Request.Headers["Content-Length"][0])" />
        <choose>
            <when condition="@(int.Parse(context.Variables.GetValueOrDefault<string>("bodySize"))<52428800)">
                <!--let it pass through by doing nothing-->
            </when>
            <otherwise>
                <return-response>
                    <set-status code="413" reason="Payload too large" />
                    <set-body>@{
                       return "Maximum allowed size for the requests is 50 MB. This request has size of "+ context.Variables.GetValueOrDefault<string>("bodySize") +" bytes";
                    }</set-body>
                </return-response>
            </otherwise>
        </choose>
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>

测试结果如下:

 

参考资料

APIM Policy 设置变量 : https://docs.azure.cn/zh-cn/api-management/set-variable-policy

APIM Policy 返回响应 : https://docs.azure.cn/zh-cn/api-management/return-response-policy

APIM Policy 控制流 : https://docs.azure.cn/zh-cn/api-management/choose-policy

How to prevent large file POST requests using Azure APIM? https://stackoverflow.com/questions/60448273/how-to-prevent-large-file-post-requests-using-azure-apim

 

 


 

当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

相关文章
|
Ubuntu 虚拟化
.bundle文件如何安装
.bundle文件如何安装
1471 0
|
小程序 JavaScript Android开发
小程序源码丢失了怎么在微信平台反编译找回
小程序源码丢失了怎么在微信平台反编译找回
1198 0
|
Linux
Linux cp命令:复制文件和目录
cp 命令,主要用来复制文件和目录,同时借助某些选项,还可以实现复制整个目录,以及比对两文件的新旧而予以升级等功能。 cp 命令的基本格式如下: [root@localhost ~]# cp [选项] 源文件 目标文件 -a:相当于 -d、-p、-r 选项的集合,这几个选项我们一一介绍; -d:如果源文件为软链接(对硬链接无效),则复制出的目标文件也为软链接; -i:询问,如果目标文件已经存在,则会询问是否覆盖; -l:把目标文件建立为源文件的硬链接文件,而不是复制源文件; -s:把目标文件建立为源文件的软链接文件,而不是复制源文件; -p:复制后目标文件保留源文件的属性(包括
2394 6
|
Rust API 开发者
【一起学Rust | 框架篇 | ws-rs框架】属于Rust的Websocket框架——ws-rs
【一起学Rust | 框架篇 | ws-rs框架】属于Rust的Websocket框架——ws-rs
1974 0
|
人工智能 资源调度 算法
内附原文|SIGMOD’24:百万核的智能调度,云数仓如何结合AI处理用户混合负载
论文提出的Flux通过使用AI技术将短时和长时查询解耦进行自动弹性,解决了云数据仓库的性能瓶颈,同时支持了资源按需预留。Flux优于传统的方法,查询响应时间 (RT) 最多可减少75%,资源利用率提高19.0%,成本开销降低77.8%。
内附原文|SIGMOD’24:百万核的智能调度,云数仓如何结合AI处理用户混合负载
|
人工智能 自然语言处理 搜索推荐
10分钟构建AI客服:阿里云技术解决方案评测
在数字化转型的浪潮中,企业对客户服务的即时性和个性化需求愈发迫切。阿里云推出的“10分钟构建AI客服并应用到网站、钉钉、微信中”的技术解决方案,为企业提供了一个快速、低成本的AI客服部署方案。本文将从部署流程、用户体验、成本效益等方面对这一方案进行深入评测。
1486 4
|
关系型数据库 MySQL Linux
Linux命令systemctl详解
`systemctl`是Linux系统用于管理systemd服务的核心命令,它与systemd守护进程交互,实现启动、停止、重启服务及查看服务状态等功能。主要参数包括`start`、`stop`、`restart`、`status`、`enable`和`disable`等。例如,启动Apache服务使用`systemctl start httpd.service`,查看服务状态用`systemctl status &lt;service&gt;`。使用时需注意权限,服务名通常以`.service`结尾,但命令中可省略。最佳实践包括利用tab键补全、定期查看服务状态和合理配置服务自启。
|
数据采集 监控 数据可视化
日志解析神器——Logstash中的Grok过滤器使用详解
日志解析神器——Logstash中的Grok过滤器使用详解
|
数据可视化 算法 vr&ar
|
小程序 前端开发 JavaScript
微信小程序MINA框架
微信小程序MINA框架
919 0