启动时出现 OData v4 错误:找不到该段的资源 'Whatever'

OData v4 error on start-up: Resource not found for the segment 'Whatever'

我正在构建我的新 v4 服务并且一切顺利,直到我为新 model/entity 添加了一个新控制器并在启动站点进行测试运行时出现此错误。

控制器似乎编码正确,就像其他控制器一样。

The path template 'Customers' on the action 'GetFeed' in controller 'CustomersOData' is not a valid OData path template. Resource not found for the segment 'Customers'.

这到底是什么意思?

如果启动时发生这种情况,请检查您是否已在启动期间将 Customers 模型类型添加到模型构建器中。

builder.EntitySet<CustomerModel>("Customers");

听起来好像正在为新控制器枚举属性映射,但它无法将客户模型类型映射回实体集。

注意:Q/A我几乎立刻就想通了,但我在这里发帖是因为我可能会再次这样做而忘记我做错了什么!

此错误发生在Web API 属性路由场景中。当 运行 HttpConfiguration 的初始值设定项时,Web API 属性路由将检查所有找到的 ODataController 的所有 ODataRouteAttributes。

您提到错误发生在您添加新 Model/entity 之后,所以我猜您可能有两个 Edm 模型:

ModelA, ModelB

而 EntitySet "Customers" 仅在其中一个模型中,例如 ModelA。

此外,您可能有以下新添加模型的代码:

config.MapODataServiceRoute("...", "...", ModelB);

启动时,Web API 发现属性:

[ODataRoute("Customers")]
public IHttpActionResult Get()
{
 ...
}

但是,Web API 无法在 ModelB 中找到 "Customers" 实体集。

我认为你可以通过将所有内容放入一个模型来解决这个问题。