webAPI OData v4 函数注册

webAPI OData v4 Function Registration

通过执行此操作设置我的 WebAPI OData 端点...

http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/create-an-odata-v4-endpoint

然后我尝试根据此文章底部的 "Example:Adding a function" 部分添加一个函数 ...

http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/odata-actions-and-functions

我遇到了一点问题,因为方法调用 "builder.EntityType()" 不存在,但其他一切正常,运行 没问题。

有什么我不知道的特殊依赖吗? 我正在使用来自 nuget 的 OData v4 包的 5.6.0 版(最新稳定版)并针对 .Net 4.6 进行编译。

编辑: 我尝试更新对 OData 包的 5.7.0-rc 构建的引用,但这也确实解决了它,这是我们关心的一点 packages.config ...

<packages>
  <package id="EntityFramework" version="6.1.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.OData" version="5.7.0-rc" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net452" />
  <package id="Microsoft.AspNet.WebApi.Cors" version="5.2.3" targetFramework="net452" />
  <package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.Data.Edm" version="5.6.4" targetFramework="net46" />
  <package id="Microsoft.Data.OData" version="5.6.4" targetFramework="net46" />
  <package id="Microsoft.OData.Core" version="6.13.0" targetFramework="net46" />
  <package id="Microsoft.OData.Edm" version="6.13.0" targetFramework="net46" />
  <package id="Microsoft.Spatial" version="6.13.0" targetFramework="net46" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net46" />
  <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net46" />
</packages>

我正在使用 ninject 等其他一些东西来做一些 DI 的东西,但我没有把它们包括在这里以保持问题简短。

好吧,由于某种原因,我的 bin 文件夹中有 5.5.1.0 版本的包,尽管程序集绑定告诉它使用更高的 5.7.0.0 版本,它还是选择了该版本。

也让我很困惑,微软已经移动了一堆东西,我的 class 中的一些 using 语句必须更改(可能是我的代码使用旧版本的原因)...

旧用法:

using Microsoft.Data.Edm;
using System.Web.Http.OData.Builder;

新用途:

using Microsoft.OData.Edm;
using System.Web.OData.Builder;
using System.Web.OData.Extensions;

可能值得注意的是,由于演练没有提及使用或版本号,它只是说 "we used OData v4" ...一如既往地有用!

我不得不深入研究 codeplex 上的源代码以找到答案,但基本上该演练是基于 5.7.0.0 或更高版本的包。