我在Azure云服务的API管理器中包装了一个应用程序API。无论出于什么原因,当我发送1000条或更多记录的JSON有效负载(转换为大约200k个字符)时,请求都会被丢弃。没有跟踪,没有日志记录只是删除,但是如果我截断有效负载,一切都会按预期工作。如果我将相同的1000条记录有效载荷发送到基础服务中(而不是通过API管理器),则所有工作均按预期进行。使用APIM时是否有请求或返回大小限制?
答案 0 :(得分:0)
我的基础服务是匹配内部响应代码,如果它们相同,则应用于总体返回代码。我的内部代码均为404“未找到项目”。 Azure API管理器将404视为错误并丢弃较大的有效负载。这是他们的支持。在较小的有效载荷上,它将返回404代码和消息,但是在较大的有效载荷上,它将被丢弃。我尝试返回404的原因是,返回有效载荷中的每个记录都包含一个状态。如果状态为混合状态,则返回207,以获取混合状态,但如果它们都相同,则返回200(找到)和404(未找到),则整个服务将内部状态作为整体状态返回。这是糟糕的设计。我的有效负载包括搜索数据库中不存在的项目,因此返回404作为总体状态,每条记录的消息均指示“未找到”。 APIM放弃了返回响应,转而使用通用的404网址未找到响应。根据结果将内部服务切换为仅返回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来解决此问题。