我使用 Visual Studio 2015 Web API 2 项目和脚手架 Controller (“使用 Entity Framework 的 Microsoft OData V4 Web API Controller ”脚手架)创建了一个非常原始的 OData 网络服务。
我的模型中只有一个实体集:“书籍”。 “Book”实体有一个原始的“Title”字符串属性。
我假设脚手架 Controller 会处理所有合法的 OData v4 请求,但事实似乎并非如此?
http://localhost:xxxx/OData/Books有效(枚举具有所有属性的所有书籍 - 包括“Title”属性)
http://localhost:xxxx/OData/Books(1)有效(枚举第一本书的所有属性,包括“Title”属性)
http://localhost:xxxx/OData/Books(1)/Title 不起作用 - 我得到一个“没有找到路由约定来为带有模板'~/entityset/key/property”的OData路径选择一个 Action 错误,尽管如此请求是 100% OData v4 投诉?
为什么不起作用?它不应该工作吗?需要什么才能让它发挥作用?
最佳答案
脚手架不会创建一个 Controller 来处理所有合法的 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
关于c# - OData V4 属性访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37257925/