我有一个使用Azure API Management的REST API,并且在使用大型查询字符串进行测试时,注意到URL超过1800个字符左右时,APIM不会路由请求,而是返回一条错误消息,指出“找不到资源”和状态码400。当我直接在本地对REST端点运行相同的请求时,它工作正常(我增加了Kestrel服务器的最大请求长度,就像在Program.cs文件中这样:
WebHost.CreateDefaultBuilder(args)
.ConfigureKestrel((context, options) =>
{
options.Limits.MaxRequestLineSize = 2147483647;
options.Limits.MaxRequestBufferSize = 2147483647;
})
.UseStartup<Startup>();
Azure APIM是否可以进行类似的配置以增加允许的最大URL大小?
答案 0 :(得分:0)
如果您使用的是GET方法,则最多不能超过2,048个字符,请减去实际路径中的字符数,因此,我建议您检查路径长度和URL长度。 URL的最大长度受不同浏览器的限制。
您可以检查此线程,以说明不同浏览器的URL长度问题:
What is the maximum length of a URL in different browsers?
Windows支持的所有文件系统都使用文件和目录的概念来访问存储在磁盘或设备上的数据。使用Windows API进行文件和设备I / O的Windows开发人员应了解文件和目录名称的各种规则,约定和限制。
您可以通读以下文档,以了解以下文档中服务器的路径长度限制:
https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file?redirectedfrom=MSDN#maxpath
此外,这是使用APIM时URL查询字符串长度的类似讨论,请检查是否有帮助,根据结论“建议,当路径的任何一部分长于261个字符时,就会出现长度问题”通过@MisterHux:
Do Azure API Mgmt have a length limit on path/parameters?
希望有帮助。
答案 1 :(得分:0)
所以回答我自己的问题:
转到Microsoft支持,他们承认这是APIM消费层的限制。一种解决方法是切换到不同的层。我已经复制了以下来自Azure支持人员的回复:
根本原因:
对于以前的调查,这张票是关于消费的 层网址限制。
因为不能通过APIM策略更改此最大URL长度的配置。此刻,消费层有这个 来自我们后端设置的限制,该设置已经写入 主要配置。
消费等级的url限制如下。网址最大长度:4096个最大查询字符串长度:2048
空格将更改为%20,即3个字符。
- APIM的开发人员,基础层和高级层使用相同的后端结构,并且在这一层中,不存在限制 从消费层开始。这些层的URL长度将超过10K。