【问题标题】:OData v4 error on start-up: Resource not found for the segment 'Whatever'启动时出现 OData v4 错误:未找到段“随便”的资源
【发布时间】:2015-03-05 15:52:35
【问题描述】:

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

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

控制器“CustomersOData”中操作“GetFeed”的路径模板“客户”不是有效的 OData 路径模板。未找到“客户”细分的资源。

这到底是什么意思?

【问题讨论】:

    标签: c# asp.net-web-api odata asp.net-web-api-odata


    【解决方案1】:

    此错误发生在 Web API 属性路由场景中。在运行 HttpConfiguration 的初始化程序时,Web API 属性路由将检查所有找到的 ODataControllers 的所有 ODataRouteAttributes。

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

    ModelA, ModelB
    

    而EntitySet“Customers”只存在于其中一个模型中,例如ModelA。

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

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

    启动时,Web API 找到属性:

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

    但是,Web API 找不到 ModelB 中设置的“客户”实体。

    我认为您可以通过将所有内容放在一个模型中来解决它。

    【讨论】:

    • 这是一个问答,所以我也回答了。我只有这个 OData v4 的一个模型,但您的诊断是正确的。术语“模型”很容易混淆,因为它可以指模型类(实体)或 EDM(实体数据模型)。我认为案例,我会添加一个新的实体模型类和控制器,但忘记向 OData 模型构建器注册实体集(根据设计,OData EDM 目前与 EF EDM 是分开的)。
    • 无意冒犯,但我选择了我自己的答案,因为它更简单、准确并且包含解决问题的代码。不过,我很感激你的回答。
    • Sam,是否可以定义一个二级 edm 模型并且在二级模型中包含一些 OData API,故意?我遇到了与上述类似的问题,请参阅我的问题:stackoverflow.com/questions/51314002/…
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-03-23
      • 2011-04-15
      • 2019-04-13
      • 2016-01-06
      • 2021-09-11
      • 1970-01-01
      • 2015-11-03
      • 1970-01-01
      • 2022-01-13
      相关资源
      最近更新 更多