c# - OData V4 属性访问

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

我使用 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/

相关文章:

c# - 免费的 PDF 操作库或代码?

javascript - 如何在odata模型读取操作中应用过滤器?

c# - 找不到资源(url)时,Web API 2.2 返回自定义 404

asp.net - 我应该如何处理 Identity 2.0、WebAPI 2.1 和 Owin 2 的身份验证?

c# - MVC URL.RouteUrl 删除 RouteValues 但 URL.Action 保留它们?

c# - 如何创建一个函数来解决两个未知数

c# - 每种语言的 .NET 本地化项目结构子文件夹

c# - 如何对 OData 客户端进行单元测试?

odata - 如何在详情页面绑定(bind)实体对象

asp.net - 将所有 Web API 请求路由到一个 Controller 方法