处理Odata / entityset / key / navigation

时间:2016-01-15 20:51:19

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

我们有一个基于ODataSamples-master odata示例的DynamicEdmModelCreation项目的项目。

我们设置了一个路由约定来处理对此特定控制器的所有请求:

gulp-babel

我们尝试例如

/ odata / Hotels - > OK!

/ odata / Hotels(1) - > OK!

/ odata /酒店(1)/房间 - >回复:

  

找不到使用模板'〜/ entityset / key / navigation'为OData路径选择操作的路由约定。

Debuging我们看到路由约定处理好请求并将其重定向到我们的控制器但没有执行任何方法。路由公约是:

[HttpGet]
[EnableQuery]
public EdmEntityObjectCollection Get()
{
...
}
[EnableQuery]
public IEdmEntityObject Get(string key)
{
...
}

我们认为问题可能出在WebApi中,因为我们正在使用通用签名 IEdmEntityObject Get(string key),因此会使用正确的方法来处理请求。

1 个答案:

答案 0 :(得分:4)

在您的控制器中,只有两个名为Get(), Get(string key)的方法。结果是:

  1. /odata/Hotels没问题,因为请求可以按惯例路由到Get()方法。

  2. /odata/Hotels(1)没问题,因为请求可以按惯例路由到Get(string key)

  3. 但是,您没有创建其他方法来响应其他请求,例如请求示例:

    /odata/Hotels(1)/Room

    由于没有方法响应~/entityset/key/navigation,因此Web API OData无法在您的控制器中找到方法,因此会抛出上述错误消息。

    我的尝试:

    您可以修改它以满足您的要求。希望它可以帮到你。

    感谢。

    萨姆