【发布时间】:2010-11-22 16:59:10
【问题描述】:
浏览器对 URL 的长度有限制。 IE 有 Url 长度不能超过 2K 个字符的限制。
当我形成一个 $filter equals 查询时,我可以与多个输入值进行比较。在这种情况下,Url 的长度将超过 2K。
OData 是否对 Url 的长度设置任何限制?
谢谢
【问题讨论】:
标签: odata
浏览器对 URL 的长度有限制。 IE 有 Url 长度不能超过 2K 个字符的限制。
当我形成一个 $filter equals 查询时,我可以与多个输入值进行比较。在这种情况下,Url 的长度将超过 2K。
OData 是否对 Url 的长度设置任何限制?
谢谢
【问题讨论】:
标签: odata
OData 本身不限制 URL 的长度,但正如您所指出的,大多数客户端和服务器都会这样做。所以通常最好不要生成太长的 URL。
您提到的问题(实现包含运算符或类似的东西)有两种可能的解决方法:
1) 使用服务操作为您处理此类查询。您可以传递编码为字符串或类似内容的多个输入值,或者服务操作可能预先知道这些。
2) 使用长 $filter,但在 $batch 请求中发送请求。优点是 URL 的限制要大得多,而且您不太可能达到它。缺点是即使您尝试执行 GET 请求,由于 $batch 它作为 POST 请求在网络上传播,因此不会被缓存。
【讨论】:
我听从@Vitek's answer OP 的问题:
OData 本身不限制 Url 的长度
但如果其他人因为 IIS 限制 到达这里:The request filtering module is configured to deny a request where the query string is too long.,他们可能会从我的回答中受益。按照该错误的说明进行操作:
Verify the configuration/system.webServer/security/requestFiltering/requestLimits@maxQueryString setting in the applicationhost.config or web.config file.
按照说明进行操作:
<configuration>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxQueryString="50000">
</requestLimits>
...
您也可能会收到此错误:
The length of the query string for this request exceeds the configured maxQueryStringLength value.
<configuration>
<system.web>
<httpRuntime maxQueryStringLength = "50000" ... />
【讨论】:
我没有找到$batch 是如何使用的。所以我使用$filter 发送一个长请求。很简单:
DataServiceQuery<CLIENT> ordersQuery = DataServiceQuery<CLIENT>)this.context.CLIENTS.AddQueryOption("$filter", MyFilter());
MyFilter() 会返回这样的字符串:"ID_CLIENT = 1 or ID_CLIENT = 2"
注意:不要使用大写的 AND。它导致错误。使用and 而不是AND
【讨论】: