【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版本
4165 0
|
4月前
|
弹性计算 人工智能 运维
阿里云服务器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月,长期成本更可控。本文从产品定位、适用场景、购买资格、续费政策等维度提供了以供对比与选购策略,帮助个人开发者与中小企业根据业务需求做出最优选择。
486 10
|
5月前
|
缓存 算法 数据可视化
大模型应用:本地数学模型:从导数求解到公式推导轻松搞定数学任务.74
Qwen2-Math-1.5B-Instruct是一款专精数学的轻量级大模型,仅1.5B参数,纯CPU即可流畅运行。它深耕代数、几何、概率等领域,支持分步解题、公式推导与通俗解析,输出规范易复用,适用于教学备课、作业辅导与数学科普。
538 8
大模型应用:本地数学模型:从导数求解到公式推导轻松搞定数学任务.74
|
5月前
|
SQL 安全 网络协议
【网络安全】《网络安全常见攻击与防御》(附:《六大攻击核心特性横向对比表》)
本体系系统梳理XSS、CSRF、SQL注入、越权、中间人攻击及DDoS六大高危网络攻击,覆盖OSI全层级,从攻击原理、链路、危害到事前—事中—事后防御策略,构建标准化、可落地的全生命周期防护框架。
|
5月前
|
编解码 人工智能 自然语言处理
#阿里云千问视觉模型实战:电商商品多视角图生成全流程解析
本文是阿里云千问视觉模型在电商商品图生成中的实战指南,详解其如何以0.1元/张、5秒生成的高效低成本,替代万元级传统拍摄,解决成本高、周期长、创意弱三大痛点,并附可运行代码与ROI分析。(239字)
|
5月前
|
Ubuntu Linux 网络安全
对时服务器技术教程:从配置到实战
本文参考http://gnifd.cn详解NTP对时服务器的配置与实战:涵盖Ubuntu下NTP服务部署、Python(ntplib)时间同步示例、常见问题排查(如服务启动失败、同步不准)、防火墙配置及进阶方向(分布式时间同步、安全性等),助力构建精准可靠的时间基础设施。(239字)
|
5月前
|
前端开发 小程序 JavaScript
前端组件库——WeUI知识点大全(一)
教程来源 http://lemci.cn/ WeUI是微信官方推出的轻量级CSS样式库,专为微信生态Web应用设计,确保网页界面与微信原生体验高度一致。支持CDN、npm及小程序多种集成方式,兼顾一致性、移动优先与可扩展性,是公众号、H5等开发的必备UI方案。
|
机器学习/深度学习 人工智能 算法
秒懂算法 | 莫队算法
本篇介绍了莫队算法的几何意义、基本莫队、带修改莫队以及树上莫队的相关内容。
1492 1
秒懂算法 | 莫队算法
|
存储 IDE Java
Eclipse安装教程 ——史上最详细安装Java创建项目教程说明
Eclipse安装教程 ——史上最详细安装Java创建项目教程说明
2181 1
Eclipse安装教程 ——史上最详细安装Java创建项目教程说明
|
XML JavaScript 前端开发
Bpmn.js简介与基础使用
Bpmn.js简介与基础使用
6635 1