OData超媒体
OData hypermedia
很久以前,当我第一次查看 OData 响应负载时,GET 请求包含 link 到其他实体或实体集(例如,OrderHeader 实体将包含 link 到订单的 OrderDetails ).我认为正确的说法是超媒体。
今天我再次查看 OData 并使用 ASP.Net Web API 构建了 OData v4 服务,但是没有这样的超媒体 link returned在有效载荷中。为什么是这样?是不是因为有效载荷现在是 JSON(而几年前我看的时候是 XML)?有什么方法可以在有效负载中包含超媒体 links 吗?
这是我构建的。我有一个名为命题的实体:
public class Proposition
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public ICollection<Event> Events { get; set; }
}
请注意,一个命题有一个事件集合。我希望当我通过 OData 端点请求一个提案时,我会得到一个 link 到事件资源,但我没有:
我在 OData JSON Format Version 4.0 Plus Errata 02#JSON Format Design 找到了一些信息,建议将 $format=odata.metadata=full 添加到 URL 将 return 我需要的东西:
The odata.metadata=full format parameter indicates that the service MUST include all control information explicitly in the payload
但我已经尝试过了,但我没有取回任何此类元数据(这次是 Postman 的屏幕截图):
邮递员告诉我 returned 是 odata.metadata.minimal:
为什么它忽略了我对完整元数据的请求?
啊哈,搞定了。我错误地指定了 URL。它需要是 ?$format=application/json;odata.metadata=full
感谢 Stuart Preston 的帮助:https://twitter.com/StuartPreston/status/601107122550616064
您应该能够将 $format=application/json;odata.metadata=full
添加到您的查询字符串以通过 GET 请求实现此目的。
很久以前,当我第一次查看 OData 响应负载时,GET 请求包含 link 到其他实体或实体集(例如,OrderHeader 实体将包含 link 到订单的 OrderDetails ).我认为正确的说法是超媒体。
今天我再次查看 OData 并使用 ASP.Net Web API 构建了 OData v4 服务,但是没有这样的超媒体 link returned在有效载荷中。为什么是这样?是不是因为有效载荷现在是 JSON(而几年前我看的时候是 XML)?有什么方法可以在有效负载中包含超媒体 links 吗?
这是我构建的。我有一个名为命题的实体:
public class Proposition
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public ICollection<Event> Events { get; set; }
}
请注意,一个命题有一个事件集合。我希望当我通过 OData 端点请求一个提案时,我会得到一个 link 到事件资源,但我没有:
我在 OData JSON Format Version 4.0 Plus Errata 02#JSON Format Design 找到了一些信息,建议将 $format=odata.metadata=full 添加到 URL 将 return 我需要的东西:
The odata.metadata=full format parameter indicates that the service MUST include all control information explicitly in the payload
但我已经尝试过了,但我没有取回任何此类元数据(这次是 Postman 的屏幕截图):
为什么它忽略了我对完整元数据的请求?
啊哈,搞定了。我错误地指定了 URL。它需要是 ?$format=application/json;odata.metadata=full
感谢 Stuart Preston 的帮助:https://twitter.com/StuartPreston/status/601107122550616064
您应该能够将 $format=application/json;odata.metadata=full
添加到您的查询字符串以通过 GET 请求实现此目的。