我使用Visual Studio 2015 Web API 2项目和脚手架控制器(" Microsoft OData V4 Web API控制器使用实体框架"脚手架)创建了一个非常原始的OData Web服务。
我的模型中只有一个实体集:" Books"。 " Book"实体有一个特权"标题"字符串属性。
我假设脚手架控制器可以满足所有合法的OData v4请求,但似乎并非如此?
http://localhost:xxxx/OData/Books有效(枚举所有属性的书籍 - 包括"标题"属性)
http://localhost:xxxx/OData/Books(1)有效(枚举第一本书上的所有属性,包括"标题"属性)
http://localhost:xxxx/OData/Books(1)/Title 不起作用 - 我收到"找不到路由约定来为OData路径选择一个带模板的操作'〜/ entityset / key / property" 错误,尽管请求是100%OData v4投诉?
为什么它不起作用?它不应该工作吗?如何使其发挥作用?
答案 0 :(得分:3)
脚手架不创建一个服务器,为所有合法的OData v4请求提供服务。
要检索Book实体的Title属性,您必须向BooksController
添加方法,如下所示:
public string GetTitleFromBook([FromODataUri] int key)
{
// Put appropriate method logic here.
}
请参阅Routing Conventions in ASP.NET Web API 2 Odata中的“查询导航属性”和“属性”表。
此外,请考虑使用$select
query option来限制您为响应实体的正常请求而获得的属性。例如:
GET http://localhost:xxxx/OData/Books(1)?$select=Title