【问题标题】:Azure API Manager POST Request/Response Limit 65,535Azure API 管理器 POST 请求/响应限制 65,535
【发布时间】:2019-01-03 22:21:33
【问题描述】:

我在 Azure 云服务的 API Manager 中封装了一个应用程序 API。无论出于何种原因,当我发送 1000 条或更多记录的 JSON 有效负载(转换为大约 200k 字符)时,请求都会被丢弃。没有跟踪,没有日志记录刚刚下降,但如果我截断有效负载,一切都会按预期工作。如果我将相同的 1000 条记录有效负载发送到底层服务(而不是通过 API 管理器),那么一切都会按预期工作。使用 APIM 时是否有请求或返回大小限制?

【问题讨论】:

  • APIM 中是否有任何处理请求正文的策略?从技术上讲,APIM 在不执行有效负载处理时对请求/响应大小没有任何限制。
  • 我不这么认为。我可以与构建策略的开发人员协商,但据我所知,它只是在处理用于身份验证的密钥。
  • 最好确保策略中没有负载处理。可以发在这里吗?当然,要从中删除所有可能的秘密。
  • 添加了政策的片段。我不得不编辑大部分内容,因为它是秘密处理。没有处理策略中的有效负载。此外,我确信底层服务可以正常工作,因为当我使用它时,它可以非常有效地返回整个有效负载。这一定是 APIM 问题。

标签: azure asp.net-web-api2 azure-api-management


【解决方案1】:

我的基础服务是匹配内部响应代码,如果它们相同,则应用于整体返回代码。我的内部代码都是 404“找不到项目”。 Azure API 管理器将 404 视为错误并丢弃大型负载。这是他们的支持。在小的返回有效负载上,它将返回 404 代码和消息,但在较大的有效负载上,它会被丢弃。我试图返回 404 的原因是因为返回有效负载中的每条记录都包含一个状态。如果状态为混合状态,则返回 207 表示混合状态,但如果它们都相同 - 200 表示已找到,404 表示未找到,则整体服务将内部状态作为整体状态返回。这是一个糟糕的设计。我的有效负载包括搜索数据库中不存在的项目,因此返回 404 作为整体状态,每条记录的消息都指示“未找到”。 APIM 放弃了返回响应,转而使用通用的 404 url​​ not found 响应。根据结果​​将内部服务切换为仅返回 200 或 207,一切正常。

{
    "ProcessId": "2",
    "Code": 404,
    "Message": "Could not resolve token.",
    "Token": "@!!!@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  }, 
{
    "ProcessId": "2",
    "Code": 404,
    "Message": "Could not resolve token.",
    "Token": "@!!!@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  }, 

整体返回码设置为 404,APIM 丢弃了响应。在这种情况下,我通过将整体返回码设置为 200 来解决此问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多