You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure APIM接收含runtime关键词JSON请求时的异常问题求助

问题诊断与解决方案

可能根因

  • APIM内置安全策略(如威胁检测、内容过滤)将"runtime"识别为敏感关键词,触发异常拦截或畸形转发,导致后端容器崩溃
  • APIM对JSON请求的自动格式化/转义逻辑,导致含"runtime"的请求体被错误修改,触发后端C#反序列化未捕获异常

最优解决方案

1. 检查并调整APIM安全策略

  • 登录Azure门户进入目标APIM实例,打开对应API的入站策略或全局策略
  • 排查是否存在validate-content、restrict-content或自定义威胁检测规则,确认是否将"runtime"列为拦截关键词
  • 修改策略排除该关键词,例如将拦截动作改为日志记录,或直接移除相关规则:
<validate-content unspecified-content-type-action="ignore" max-size="102400" size-exceeded-action="reject">
  <content-type-checks>
    <content-type value="application/json">
      <rule name="NoSensitiveWords" pattern="^(?!.*runtime).*$" negate="false" action="log" />
      <!-- 将action从reject改为log,或删除该规则 -->
    </content-type>
  </content-type-checks>
</validate-content>

2. 透传原始请求体,禁用APIM自动修改

  • 在API入站策略中添加配置,直接转发原始请求体,避免APIM对JSON内容做额外处理:
<policies>
  <inbound>
    <set-header name="Content-Type" exists-action="override">
      <value>application/json</value>
    </set-header>
    <set-body>@(context.Request.Body.As<string>(preserveContent: true))</set-body>
  </inbound>
</policies>

3. 后端C#反序列化容错配置(兜底)

  • 若APIM调整后仍有问题,在后端配置反序列化容错,避免特殊文本触发崩溃:
// System.Text.Json配置示例
var serializerOptions = new JsonSerializerOptions
{
    PropertyNameCaseInsensitive = true,
    ReadCommentHandling = JsonCommentHandling.Skip,
    AllowTrailingCommas = true,
    // 忽略无法映射的属性,避免反序列化异常
    IgnoreUnknownFields = true
};

var requestModel = JsonSerializer.Deserialize<YourTargetModel>(requestBody, serializerOptions);

4. 排查APIM请求日志

  • 在APIM门户监控 > 日志中筛选目标请求,对比原始请求体与转发到后端的请求体差异,确认是否存在APIM修改内容的情况

内容的提问来源于stack exchange,提问作者Brunno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 12:03:27