向Azure API发送长字符串时出现403错误
问题分析与解决方案
核心问题
Azure部署的API接口MergeBase64ToPDF,接收包含List<string>的请求体,本地调试、前端网页调用均正常,但通过Postman/JMeter直接调用服务器地址时,只要请求中单个字符串长度超过102362字符就返回403错误,且请求未进入方法内部。
可能原因及解决办法
1. Azure App Service 请求长度限制
Azure App Service默认对请求内容有大小限制,当请求体过大时会被平台层提前拦截,直接返回403。
解决步骤:
- 登录Azure门户,找到目标App Service,进入配置 > 常规设置
- 找到请求正文大小限制,调整为符合需求的数值(例如设置为
100MB,对应字节数104857600) - 保存配置后重启App Service
2. ASP.NET Core 自身请求大小限制
即使Azure平台放开限制,ASP.NET Core项目本身也有默认的请求大小阈值,超过会被框架拦截。
解决步骤:
- 在
Program.cs中添加全局配置:builder.Services.Configure<Microsoft.AspNetCore.Http.Features.FormOptions>(options => { options.MultipartBodyLengthLimit = 104857600; // 100MB,按需调整 options.ValueLengthLimit = 104857600; }); - 也可以直接在目标Action上添加特性限制:
[HttpPost] [Route("MergeBase64ToPDF")] [RequestSizeLimit(104857600)] public IResult MergeBase64ToPDF([FromBody] MergeBase64ToPDFRequest MergeBase64Request) { // 方法逻辑 }
3. Azure WAF(Web应用防火墙)拦截
如果App Service配置了WAF,大请求可能被WAF规则误判为恶意攻击(如SQL注入、XSS规则),从而触发403拦截。
解决步骤:
- 进入Azure门户的对应应用程序网关,找到关联的WAF策略
- 查看WAF日志,确认是否是特定规则触发了拦截
- 可临时禁用可疑规则,或添加自定义规则允许该接口的大请求;也可先将WAF模式切换为检测模式验证问题来源
4. 客户端请求格式/头信息问题
Postman/JMeter的请求头或格式设置不当,也可能导致403错误。
解决步骤:
- 确认请求的
Content-Type头为application/json - 对比前端网页调用的请求头,确保
Authorization等必要头信息完全一致 - 通过浏览器F12复制网页请求为cURL,导入Postman后对比差异,定位配置问题
5. 模型或路由约束限制
检查请求模型或路由是否存在无意中的长度限制。
解决步骤:
- 查看
MergeBase64ToPDFRequest模型中List<string>属性是否添加了[MaxLength]等长度限制特性,如有则调整为合适值 - 检查项目路由配置,确保未对该接口添加特殊的路由约束
内容的提问来源于stack exchange,提问作者Chozang
相关产品推荐
相关产品推荐

