10

我正在.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
}

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

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

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

是否有需要添加的新包?

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

4

1 回答 1

19

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

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

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

services.AddControllers()
        .AddOData(opt => opt.AddModel("odata", GetEdmModel()));

[更新 - 2021 年 11 月 11 日]

在 odata 8.0 AddModel 不再存在,它被重命名为 AddRouteComponents

services.AddControllers()
        .AddOData(opt => opt.AddRouteComponents("odata", GetEdmModel()));

https://devblogs.microsoft.com/odata/api-versioning-extension-with-asp-net-core-odata-8/

于 2021-06-14T09:46:03.710 回答