【问题标题】:Accessing OData Property访问 OData 属性
【发布时间】:2014-10-14 15:27:19
【问题描述】:

我对 oData 网络服务很陌生。我想在移动平台上获取并填充以下输出。我可以在移动平台 http://services.odata.org/V4/Northwind/Northwind.svc/Customers 上填充以下 url 数据。然而,一旦我开始做另一个练习。我坚持以下 odata 输出。如何访问属性,例如名称或描述?

PUT /OData/OData.svc/Products(1) HTTP/1.1 Host: services.odata.org DataServiceVersion:
  1.0 MaxDataServiceVersion: 2.0 accept: application/atom+xml 
  content-type: application/atom+xml Content-Length: 1181 
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Entry xml:base="http://services.odata.org/OData/OData.svc/" 
    xmlns:d=" http://schemas.microsoft.com/ado/2007/08/dataservices"
    xmlns:m=" http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" 
    xmlns="http://www.w3.org/2005/Atom"> 
  <id>http://services.odata.org/OData/OData.svc/Products(1)</id>
  <title type="text"></title> 
  <updated>2010-02-28T10:23:02Z</updated>
  <author> 
    <name /> 
  </author> 
  <Link rel="edit" title="Product" href="Products(1)" /> 
  <category term="DataServiceProviderDemo.Product" 
      scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /> 
  <content type="application/xml"> 
    <m:properties> 
      <d:ID m:type="Edm.Int32">1</d:ID>
      <d:Name>Milk</d:Name> 
      <d:Description>Low fat milk</d:Description>
      <d:ReleaseDate m:type="Edm.DateTime">1995-10-21T00:00:00</d:ReleaseDate>
      <d:DiscontinuedDate m:type="Edm.DateTime" m:null="true" /> 
      <d:Rating m:type="Edm.Int32">4</d:Rating>
      <d:Price m:type="Edm.Decimal">4.5</d:Price> 
    </m:properties> 
  </content>
</Entry>

【问题讨论】:

  • 您的问题是您想使用原子有效负载更新 services.odata.org/v4/odata/odata.svc/ 中的实体并得到错误吗?什么是访问属性?似乎是一个不同的问题。您能否详细说明您的场景和遇到的问题? :)
  • 我想获取 ID、名称、描述、ReleaseDate、Discontunie、Rating、Price 属性。
  • 我感到困惑的原因是您附加的输出中的 HTTP 动词是“PUT”。好的,现在我想我知道该怎么回答了:)
  • 请继续,很抱歉让易丁感到困惑:-)

标签: odata


【解决方案1】:

有几种方法可以访问特定属性,因为实体上有两种属性:非导航属性和导航属性。

非导航属性可以是原始类型属性、原始类型属性的集合、复杂类型属性、复杂类型属性或流属性。当您查询实体集或特定实体时,非导航属性的值默认是实体负载的内联:

例如查询时IDNameDescription等是内联的:

GET http://services.odata.org/v4/odata/odata.svc/Products

如果你想选择你需要的属性,你可以使用$select查询选项。例如

GET http://services.odata.org/v4/odata/odata.svc/Products?$select=ID,Name

通过附加这样的查询选项,您将只找到有效负载内联所需的属性。

如果您只想访问属性值,您应该将属性名称作为一个段附加到请求 URL 到一个单个实体。例如

GET http://services.odata.org/v4/odata/odata.svc/Products(1)/ID

还有另一种属性:导航属性。它们要么是实体类型属性,要么是实体类型属性的集合。导航属性描述了服务中不同实体之间的关系。一个示例是 Product 实体上的 Categories 导航属性。

导航属性默认不显示在实体负载的内联。为了将它们包含在内,需要使用 $expand 查询选项:

GET http://services.odata.org/v4/odata/odata.svc/Products?$expand=Categories

如果您只想访问导航属性,请求 URL 与非导航属性类似:

GET http://services.odata.org/v4/odata/odata.svc/Products(1)/Categories

要详细了解如何针对不同场景发出不同的 OData 请求以及 URL 约定是什么,以下材料很有帮助:

OData.org 上的教程:http://www.odata.org/getting-started/basic-tutorial/(基础)、http://www.odata.org/getting-started/advanced-tutorial/(高级)。

OData V4 的 URL 约定规范:http://docs.oasis-open.org/odata/odata/v4.0/os/part2-url-conventions/odata-v4.0-os-part2-url-conventions.html

OData V4协议规范:http://docs.oasis-open.org/odata/odata/v4.0/os/part1-protocol/odata-v4.0-os-part1-protocol.html

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-01
  • 2015-11-03
  • 1970-01-01
  • 1970-01-01
  • 2017-03-16
  • 2013-12-23
  • 2013-07-11
相关资源
最近更新 更多