【问题标题】:OData Url Length LimitationsOData 网址长度限制
【发布时间】:2010-11-22 16:59:10
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: odata


    【解决方案1】:

    OData 本身不限制 URL 的长度,但正如您所指出的,大多数客户端和服务器都会这样做。所以通常最好不要生成太长的 URL。

    您提到的问题(实现包含运算符或类似的东西)有两种可能的解决方法:

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

    2) 使用长 $filter,但在 $batch 请求中发送请求。优点是 URL 的限制要大得多,而且您不太可能达到它。缺点是即使您尝试执行 GET 请求,由于 $batch 它作为 POST 请求在网络上传播,因此不会被缓存。

    【讨论】:

    • 这些来自调用堆栈,来自“System.UriFormatException: 'Invalid URI: The Uri scheme is too long.':” 引发的异常.Uri 并且限制在 System.Uri.cs 中设置为 c_MaxUriSchemeName = 1024。` System.dll!System.Uri.CreateUri System.Web.OData.dll! `
    • 您介意根据 2021 年的情况更新您的答案吗?
    【解决方案2】:

    我听从@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.

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

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

    【讨论】:

      【解决方案3】:

      我没有找到$batch 是如何使用的。所以我使用$filter 发送一个长请求。很简单:

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

      MyFilter() 会返回这样的字符串:"ID_CLIENT = 1 or ID_CLIENT = 2"

      注意:不要使用大写的 AND。它导致错误。使用and 而不是AND

      【讨论】:

      • 我不知道如何回答 OP 的问题。这与 URL 长度过长有何关系?
      • 我不知道。我什至不记得写过这个答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-31
      • 2013-10-25
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2016-08-16
      相关资源
      最近更新 更多