【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

 

 


 

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

相关文章
|
Java 应用服务中间件
WebLogic Server 10.3.6.0 更改jdk版本
WebLogic Server 10.3.6.0 更改jdk版本
4134 0
|
3月前
|
弹性计算 人工智能 运维
阿里云服务器2核4G199元1年:轻量应用服务器抢购和云服务器u1实例对比与选购策略参考
阿里云服务器2核4G热门配置价格:轻量应用服务器2核4G(199元/年)与云服务器ECS通用算力型u1实例2核4G(199元/年)。二者虽价格相同,但定位截然不同:轻量服务器主打开箱即用,峰值带宽达200M,预装OpenClaw等AI镜像,适合新用户快速建站或AI尝鲜,但续费价格较高且需每日限时抢购;ECS u1实例则提供5M固定带宽、80G云盘,支持VPC等深度定制,企业新老用户同享,且承诺续费同价至2027年3月,长期成本更可控。本文从产品定位、适用场景、购买资格、续费政策等维度提供了以供对比与选购策略,帮助个人开发者与中小企业根据业务需求做出最优选择。
435 10
|
3月前
|
云安全 人工智能 运维
阿里云ACP认证考试是什么?ACP高级工程师认证费用、考试大纲下载及问题解答FAQ
阿里云ACP云计算高级工程师认证,面向架构/开发/运维人员,考核云架构设计能力。考试线下进行,120分钟、100分制(80分及格),含单选与多选。官方价1200元/次(活动价840元)。含课程、实验、大纲等全套学习资源。阿里云认证官网:https://t.aliyun.com/U/cLcbll
447 1
|
机器学习/深度学习 人工智能 算法
秒懂算法 | 莫队算法
本篇介绍了莫队算法的几何意义、基本莫队、带修改莫队以及树上莫队的相关内容。
1441 1
秒懂算法 | 莫队算法
|
存储 IDE Java
Eclipse安装教程 ——史上最详细安装Java创建项目教程说明
Eclipse安装教程 ——史上最详细安装Java创建项目教程说明
2141 1
Eclipse安装教程 ——史上最详细安装Java创建项目教程说明
|
SQL Kubernetes Cloud Native
SaaS服务的私有化部署,这样做最高效|云效工程师指北
为了能够有效且高效地同时管理SaaS版本和私有化版本的发布过程,云效团队也结合云原生的基础设施和标准化工具(比如helm)进行了一系列的探索和实践,并将其中一些通能的能力进行了产品化。本文从问题本身出发,讲解解决问题的思路,及如何通过“DIY”的方式来实现这套思路。
4173 4
SaaS服务的私有化部署,这样做最高效|云效工程师指北
idea debug模式启动特别慢问题
idea debug模式启动特别慢问题
489 0
idea debug模式启动特别慢问题
|
JavaScript 前端开发
Vue实现无限级树形选择器(无第三方依赖)
想要在 Vue 中实现一个这样的无限级树形选择器其实并不难.
Vue实现无限级树形选择器(无第三方依赖)
|
资源调度 分布式计算 大数据
面向大数据与云计算调度挑战的阿里经济体核心调度系统—Fuxi 2.0全揭秘
随阿里经济体和阿里云丰富的业务需求(尤其是双十一)和磨练,伏羲的内涵不断扩大,从单一的资源调度器(对标开源系统的YARN)扩展成大数据的核心调度服务,覆盖数据调度(Data Placement)、资源调度(Resouce Management)、计算调度(Application Manager)、和本地微(自治)调度(即正文中的单机调度)等多个领域,并在每一个细分领域致力于打造超越业界主流的差异化能力。
4850 1
面向大数据与云计算调度挑战的阿里经济体核心调度系统—Fuxi 2.0全揭秘