我遵循Mike Wasson的这个asp.net教程,设法建立相关实体就好了,但是当我将这个逻辑应用到我的项目时,更复杂的实体关系(其中有更多的实体关系;这是唯一的区别)在OData调用中不会成功,我使用此有效负载得到404:
{
"error": {
"code": "",
"message": "No HTTP resource was found that matches the request URI 'http://localhost:19215/Menus(c94f7f98-6987-e411-8119-984be10349a2)/MenuPermissions'.",
"innererror": {
"message": "No routing convention was found to select an action for the OData path with template '~/entityset/key/unresolved'.",
"type": "",
"stacktrace": ""
}
}
}
Run Code Online (Sandbox Code Playgroud)
该教程没有提到必须设置EdmModel导航,Mike Wasson指出"asp.net是官方文档:-)"; 所以,我花了一些时间试图让这些相关的实体工作,以为我错误地设置了项目.
我认为这可能与NuGet正在安装的ASP.NET OData库版本有关(NuGet Console安装6.9.x,而NuGet Dialog安装6.5.x).我也想知道是不是因为我将项目设置为一个完全空的项目然后使用OWIN,所以我尝试使用纯ASP.NET模板解决方案.我还尝试了其他几种可能的解决方案:我的控制器方法上的OData-route-attributes; 并将我的数据层和模型都包含在同一个库中(我将它们分开以保持DRY); 我甚至试图使用Rick Anderson的WebApi路由调试器 - 我不会再尝试使用它了!
一切都无济于事.
有一段时间他们工作,但我不知道为什么; 他们不再在下一次建造/运行中工作 - 我想我之间改变了一些东西,但它非常小,我在每一步都失去了信心.
然后我决定Mike Wasson必须在他的教程中采取阻力最小的路径,所以我回复到这个问题/答案,并将其修改为与ODataConventionModelBuilder一起使用并重用,我将在下面的答案中解释.
如果有人知道更简单的方法让这个工作,请告诉我,否则我建议只是咬紧牙关并在下面的答案中写下这些EdmModel-Navigations.