使用oData访问Cosmos DB表端点

时间:2017-05-23 20:35:25

标签: rest azure odata azure-cosmosdb

我正在学习Cosmos DB,并且正在阅读Microsoft Cosmos DB文档站点上的以下教程:

https://docs.microsoft.com/en-us/azure/cosmos-db/tutorial-query-table

不幸的是,我遇到了我试图访问我创建的实体的问题。无论何时我运行GET请求以接收oData响应,我都会收到以下错误消息:

{
  "code": "BadRequest",
  "message": "Request url is invalid.\r\nActivityId: e7df6ff2-eaea-4d10-8823-ff0cee3a62c2"
}

我的端点看起来像这样(请注意,我用abc替换了我的实际Cosmos帐户):

https://abc.documents.azure.com

我还尝试使用启动oData查询:

https://abc.documents.azure.com:443

根据教程,我应该创建一个数据库,一个表,并添加三个实体。我使用Table API' TableOperation.Insert()方法成功地使用了C#。由于我可以使用Table API成功创建表和实体,因此我知道我使用的端点是准确的,并确保我从连接字符串中复制/粘贴该元素,并且我知道它与Azure中的数据库匹配。

以下是Azure中数据库的外观:

Database, Tables, and Entities configured 接下来,本教程让您使用表端点运行查询。这是我开始感到困惑的地方,因为我找不到解释如何获取 Table 端点的文档。

以下是教程显示的示例: https://<mytableendpoint>/People(PartitionKey='Harp',RowKey='Walter')

所以我想,试试这个: https://abc.documents.azure.com/People(PartitionKey='Harp',RowKey='Walter')

那没用,所以我想也许我还需要指定数据库(如上图所示的TablesDB): https://abc.documents.azure.com/TablesDB/People(PartitionKey='Harp',RowKey='Walter')

这也不起作用。正如本文前面提到的,我尝试将:443附加到所有测试查询的末尾,但错误响应仍然相同。

现在,我正在使用Postman GETs尝试所有这些。

另外,我确实尝试在Postman中获得这样的令牌: https://login.microsoftonline.com/{{tenant_id}}/oauth2/token

然后使用Authorization参数发送GET请求并传递令牌但仍然得到与上面列出的相同的错误。

您知道如何正确构建表端点以成功发送请求并接收oData响应吗?

谢谢。

2 个答案:

答案 0 :(得分:2)

原始问题中使用的端点是实际公开我们的SQL API而不是Table API的文档端点。由于表已经过GA,我们不再宣传该端点,而是宣传支持与Azure表存储相同的REST API的表端点。您可以查看cosmos db, generate authentication key on client for Azure Table endpoint详细了解如何与端点通信,您需要哪些标头等等。

请注意,与端点通信的最简单方法是使用Table API SDK之一。 https://docs.microsoft.com/en-us/azure/cosmos-db/table-sdk-dotnet指向我们的.NET SDK,但如果您在该页面左侧查​​看,您将在目录中看到我们的Java,Python和Node SDK的链接。请注意,这些SDK与用于Azure表存储的SDK相同。另请注意,您可以使用它们提交OData查询。

答案 1 :(得分:1)

我正在使用this API根据PartitionKeyRowKey查询表格中的实体,它在我这方面运作正常,请参考它。

请求和响应:

enter image description here

enter image description here

enter image description here

表格中的实体:

enter image description here