Azure 表存储 - 501 未实现

问题描述 投票:0回答:3

我正在按照本指南使用 Azure 表:https://learn.microsoft.com/en-us/dotnet/api/overview/azure/data.tables-readme-pre,它使用 Azure.Data。表 NuGet 包。

我可以成功保存一行并在 Azure 门户内的存储资源管理器中查看它,但是当尝试执行简单查询时,我会返回:

Unhandled exception. Azure.RequestFailedException: Service request failed.
Status: 501 (Not Implemented)

Content:
{"odata.error":{"code":"NotImplemented","message":{"lang":"en-US","value":"The requested operation is not implemented on the specified resource.\nRequestId:0137da3a-f002-0031-19
d6-5234ab000000\nTime:2021-05-27T08:59:39.8919922Z"}}}

我的查询代码是:

    var entities = _tableClient
        .Query<TableEntity>(t => t.PartitionKey == PartitionKey)
        .ToList();
azure azure-storage azure-table-storage azure-tablequery
3个回答
2
投票

我也遇到了这个确切的问题,虽然它似乎没有在任何地方记录,但以下内容对我有用:

var token = new DefaultAzureCredential();
var tableServiceClient = new TableServiceClient(new Uri($"https://{storageAccountName}.table.core.windows.net/"), token);
var client = tableServiceClient.GetTableClient(tableName);
var entities = client.Query<MyEntity>(filter: $"PartitionKey eq '{partKey}'");

我不太明白为什么直接创建TableClient:

new TableClient(new Uri($"https://{storageAccountName}.table.core.windows.net/{tableName}"), tableName, token);

不起作用,但首先通过 TableServiceClient 对我有用。尝试一下。


1
投票

当我像这样创建客户端时,我在 java SDK 中遇到了这个问题:

new TableClientBuilder()   
        .endpoint("https://{storageAccountName}.table.core.windows.net/{tableName}")
                .sasToken(sas)
                .tableName(tableName)
                .buildClient()

所以我做错的是将表名称作为端点的一部分并将其删除以停止异常。


0
投票

OP 的问题是他们使用

==
而不是
eq
作为相等运算符,因为
==
不是支持的查询比较运算符之一。

我有一个不同的问题,但有同样的错误,所以我想我会分享我的答案。更新到最新的

Azure.Data.Tables
NuGet 包后,我开始收到相同的错误,其中我收到如下错误:

状态:501(未实施)

错误代码:未实现

内容: {“odata.error”:{“code”:“NotImplemented”,“message”:{“lang”:“en-US”,“value”:“指定资源上未实现请求的操作。 请求 ID:ce4208b5-b002-0001-63f9-59956d000000 时间:2024-02-07T19:10:04.3685354Z"}}}

我的问题是我在查询过滤器中使用布尔值,如下所示:

filter += $" and (OperationSuccessful eq {parameters.Successful})";

其中

parameters.Successful
是布尔值。这导致了一个查询过滤器,如:

“(PartitionKey eq '某个分区键') 和 (成功 eq True)”

NuGet 包更新似乎引入了一项重大更改,其中查询现在区分大小写,因此将“True”和“False”大写会破坏查询。

解决方案是将代码更新为:

filter += $" and (OperationSuccessful eq {parameters.Successful.ToString().ToLower()})";

这导致查询看起来像这样:

“(PartitionKey eq '某些分区键') 和 (成功 eq true)”

虽然有点麻烦,但对我来说事情又重新开始了。

© www.soinside.com 2019 - 2024. All rights reserved.