我们有一个基于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),因此会使用正确的方法来处理请求。
答案 0 :(得分:4)
在您的控制器中,只有两个名为Get(), Get(string key)
的方法。结果是:
/odata/Hotels
没问题,因为请求可以按惯例路由到Get()
方法。
/odata/Hotels(1)
没问题,因为请求可以按惯例路由到Get(string key)
。
但是,您没有创建其他方法来响应其他请求,例如请求示例:
/odata/Hotels(1)/Room
由于没有方法响应~/entityset/key/navigation
,因此Web API OData无法在您的控制器中找到方法,因此会抛出上述错误消息。
我在https://github.com/xuzhg/ODataSamples/commit/289658ab5d7bb50c6270400946990c27809d44bc
此外,我还在SelectAction
MatchAllRoutingConvention
中创建了常规导航属性访问路径。查看提交:
https://github.com/xuzhg/ODataSamples/commit/200c4abd346f14ad258df2b36e8687f8ab7d85e7
您可以修改它以满足您的要求。希望它可以帮到你。
感谢。
萨姆