ODataURL长度限制

ODataURL长度限制,odata,Odata,浏览器对URL的长度有限制。IE限制Url长度不应超过2K个字符 当我形成$filter equals查询时,我可以与多个输入值进行比较。在这种情况下,Url的长度将超过2K OData是否对Url的长度设置了任何限制 谢谢OData本身并没有限制Url的长度,但正如您所注意到的,大多数客户端和服务器都会限制Url的长度。所以通常情况下,最好不要生成太长的URL 您提到的问题(实现Contains运算符或类似的操作)有两种可能的解决方法: 1) 使用服务操作为您处理此类查询。您可以传递编码为字符

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

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

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


谢谢

OData本身并没有限制Url的长度,但正如您所注意到的,大多数客户端和服务器都会限制Url的长度。所以通常情况下,最好不要生成太长的URL

您提到的问题(实现Contains运算符或类似的操作)有两种可能的解决方法:

1) 使用服务操作为您处理此类查询。您可以传递编码为字符串或类似内容的多个输入值,或者服务操作预先知道这些值


2) 使用长$filter,但在$batch请求中发送请求。其优点是,Url的限制要大得多,您不太可能找到它。缺点是,即使您试图执行GET请求,由于$batch作为POST请求在web上传输,因此它不会被缓存。

我没有找到如何使用
$batch
。因此,我使用
$filter
发送长请求。这很简单:

DataServiceQuery<CLIENT> ordersQuery = DataServiceQuery<CLIENT>)this.context.CLIENTS.AddQueryOption("$filter", MyFilter());
DataServiceQuery ordersQuery=DataServiceQuery)this.context.CLIENTS.AddQueryOption(“$filter”,MyFilter());
其中
MyFilter()
返回如下字符串:
“ID\u CLIENT=1或ID\u CLIENT=2”

注意:不要用大写和小写。它会导致错误。使用
而不是

我遵从OP的问题:


OData本身并不限制Url的长度

但是,如果其他人由于IIS限制而到达这里
请求过滤模块被配置为拒绝查询字符串过长的请求。
,他们可能会从我的回答中受益。请遵循该错误的说明:

<configuration>
  <system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxQueryString="50000">
        </requestLimits>
        ...
验证配置/system.webServer/security/requestFiltering/requestLimits@maxQueryString在applicationhost.config或web.config文件中设置。

请按照说明操作:

<configuration>
  <system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxQueryString="50000">
        </requestLimits>
        ...

我不知道如何回答OP的问题。这与URL长度过长有什么关系?我不知道。我甚至不记得写过这个答案,这些答案来自调用堆栈,来自一个异常引发的“System.UriFormatException:“无效的URI:URI方案太长了。”:“正如您清楚看到的,Odata限制URI只是因为它使用System.URI,并且限制在System.URI.cs中设置为c_MaxUriSchemeName=1024。”System.dll!System.Uri.CreateUri System.Web.OData.dll`你介意根据2021年的情况更新你的答案吗?