【问题标题】:DataServiceVersion conflict: The DataServiceVersion '1.0' is too low for the request. The lowest supported version is '3.0'DataServiceVersion 冲突:DataServiceVersion '1.0' 对于请求来说太低了。支持的最低版本是“3.0”
【发布时间】:2013-07-24 18:48:36
【问题描述】:

使用这种技术 (How to dynamic add filters to a LINQ query against an Odata Source in C#),我在 LINQ 查询中动态构建了一个 where 子句,用于连接我的 Odata 端点。我经常这样做,效果很好。但是现在我的查询包含一些 odata v3.0 功能,我收到了这个错误。

DataServiceVersion '1.0' 对于请求来说太低了。支持的最低版本是“3.0”

我使用唯一的 Northwind 端点构建了一个简单的复制,并且可以在标准 C# 代码或 linqpad 中复制它。

罗斯文端点:http://services.odata.org/Northwind/Northwind.svc/

有效的查询。

from x in Categories
where x.Products.Any( e => e.ProductName == "chai")
select x

查询生成的 URL。

http://services.odata.org/Northwind/Northwind.svc/Categories()?$filter=Products/any(e:e/ProductName eq 'chai')

这里是查询,如果我动态生成了 where 子句(就像我在上面链接的技术中所做的那样)

 from x in Categories.AddQueryOption("$filter",  "Products/any(e:e/ProductName eq 'chai')")
 select x

但是现在我得到了错误。

当我查看我的 DataServiceContext 时,它有一个 MaxProtocolVersion 表示 V3,当然我的项目是 dotnet 4.5 并且普通查询正在运行。

所以我认为正在发生的事情.. 是服务器支持 V3 功能,我正在使用它,但客户端必须查看 LINQ 查询并将其 DataServiceVersion 标识为在查询,并且因为我使用 V3 功能,但仅在它无法推理的动态部分,它认为我只使用 V1 功能..

如果我在如下选择中使用 V2 功能(投影)

from x in Categories.AddQueryOption("$filter",  "Products/any(e:e/ProductName eq 'chai')")
 select new { x.CategoryID, x.CategoryName }

然后我得到一个稍微不同的错误

DataServiceVersion '2.0' 对于请求来说太低了。支持的最低版本是“3.0”。有关详细信息,请参阅下面的例外情况。

这似乎支持了我的假设..

所以我可以看到 2 个解决方案 1)以某种方式告诉DataServiceContext或引擎强制客户端将查询识别为V3,或者像上面一样,我在查询的选择中使用了V2功能,从而提出了引擎可以解决的“最低公分母”从它可以识别的查询部分来看,同样是否有一些 V3 功能我可以在 Select 中使用,或者另一个子句只是为了强制查询实际上是 V3?

有谁知道有什么可以帮忙的吗?

【问题讨论】:

    标签: c# linq wcf-data-services odata


    【解决方案1】:

    这是我发现的工作。基本上我只是在挂钩和覆盖 HTTP 标头

    MyDatacontext.SendingRequest2 += (sender, eventArgs) => {                 
               eventArgs.RequestMessage.SetHeader("DataServiceVersion", "3.0;NetFx");
        };
    

    我正在使用 WCF 5.0,因此正在使用 SendingRequest2 ,但是如果使用旧版本,您可能会使用已弃用的 SendingRequest 或 BuildingRequest 事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-19
      • 1970-01-01
      • 2012-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多