.NET CORE 5 中的 Microsoft OData - 将 OData 添加到服务会引发丢失的 using 指令,但包在那里

si2*_*030 5 c# odata .net-core microsoft-odata

我正在 .net core 5.0 中开发。(Sam Xu 有一个关于迁移到 dotnet core 5 的教程

我已经回到了 Visual Studio 中最简单的 API 项目的绝对最低限度。

今年早些时候,我在我的项目中进行了这项工作,它在 .net core 5.0 上运行。请参阅上面的教程。

在这个项目中,我创建了一个新项目。然后我去NuGet获取包“Microsoft.AspNet.OData”版本7.4.1

然后我将以下内容添加到启动文件中。

public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddCors();
    services.AddControllers();

    services.AddOData();  //THIS ONE
}
Run Code Online (Sandbox Code Playgroud)

我添加了“services.AddOData”并抛出了错误,

错误 CS1061“IServiceCollection”不包含“AddOData”的定义,并且找不到接受“IServiceCollection”类型的第一个参数的可访问扩展方法“AddOData”(您是否缺少 using 指令或程序集引用?) JobsLedger.API C:\Users/.../JobsLedger.API\Startup.cs 35 活动

我已经添加了此服务所需的包。现在我几个月前就开始工作了。

是否有需要添加的新包?

我做错了什么,还是这是我不知道的“重大变化”?

Mat*_*zzi 5

如果您使用的是 .net5.0,则需要 odata 8.0 预览版。

在 rc2 中,根据这篇文章https://devblogs.microsoft.com/odata/attribute-routing-in-asp-net-core-odata-8-0-rc/,Sam Xu 做了一个突破性的改变。

“AddOData 从 ISeivceCollection 上的扩展更改为 IMvc(Core)Builder 上的扩展。 通过先调用 AddControllers(),然后调用 AddOData(),迁移很容易。

services.AddControllers()
        .AddOData(opt => opt.AddModel("odata", GetEdmModel()));
Run Code Online (Sandbox Code Playgroud)

  • @BenRobinson 我需要为 Microsoft.AspNetCore.OData 添加 using 语句; (2认同)
  • `AddModel` 似乎不再存在。看起来我们应该使用`.AddOData(opt => opt.AddRouteComponents("odata", GetEdmModel()));`代替。 (2认同)