2010-11-22 90 views
7

浏览器对URL的长度有限制。 IE限制Url长度不应超过2K个字符。OData URL长度限制

当我形成$ filter equals查询时,我可以与多个输入值进行比较。在这种情况下,Url的长度将超过2K。

OData是否对Url的长度设置了任何限制?

感谢

回答

6

的OData本身不限制URL的长度,但你注意到大多数客户端和服务器做。所以通常情况下,不要产生URL太长,这是一个好主意。

您参考(实施包含运营商,或者类似的东西),有两种可能的解决方法的问题:

1)使用服务操作来处理这样的查询适合你。您可以传递以字符串或类似方式编码的多个输入值,或者服务操作无论如何都知道这些。

2)使用long $过滤器,但在$批量请求中发送请求。优点是Url的限制更大,并且不太可能会达到目标。缺点是,即使你试图执行一个GET请求,由于它的批处理,它会作为POST请求通过网络传输,因此它不会被缓存。

0

我没有找到$batch的使用方法。所以我用$filter发送长时间的请求。它很容易:

DataServiceQuery<CLIENT> ordersQuery = DataServiceQuery<CLIENT>)this.context.CLIENTS.AddQueryOption("$filter", MyFilter()); 

其中MyFilter()返回一个像这样的字符串:"ID_CLIENT = 1 or ID_CLIENT = 2"

注意:不要使用大写和。它导致和错误。使用andAND

+4

我不明白如何回答OP的问题。这与URL长度过长有什么关系? – Jerther 2015-10-22 12:04:06

1

我推迟到@Vitek's answer业务方案的问题:

OData itself doesn't limit the length of the Url

但如果别人谁抵达,因为这里IIS限制:​​,他们可以从我的回答中受益。按照这个错误的指示:

Verify the configuration/system.webServer/security/requestFiltering/[email protected] 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.

这种技术被描述herehere,它看起来像这个:

<configuration> 
    <system.web> 
     <httpRuntime maxQueryStringLength = "50000" ... />