OData V4属性访问

时间:2016-05-16 15:46:03

标签: c# odata asp.net-web-api2 scaffolding

我使用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投诉?

为什么它不起作用?它不应该工作吗?如何使其发挥作用?

1 个答案:

答案 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