.net - Cosmos DB : Collection exists, 但抛出 410 GONE httpstatus 代码

标签 .net azure azure-cosmosdb

我的一些代码在我的应用程序启动时检查集合是否存在。

但是,要检查的代码:

await client.ReadDocumentCollectionAsync(UriFactory.CreateDocumentCollectionUri(DatabaseId, collectionId));

抛出 DocumentClientException 并带有 410 GONE http 状态代码。

但是,当我使用数据浏览器时,我发现具有我提供的 collectionId 的集合确实存在。此外,我在测试中尝试了以下操作:

try
{
    await client.ReadDocumentCollectionAsync(UriFactory.CreateDocumentCollectionUri(DatabaseId, collectionId));
}
catch (DocumentClientException e)
{

    if (e.StatusCode == System.Net.HttpStatusCode.NotFound || e.StatusCode == System.Net.HttpStatusCode.Gone)
    {
        var collection = new DocumentCollection { Id = collectionId, ResourceId = collectionId };
        await client.CreateDocumentCollectionAsync(
            UriFactory.CreateDatabaseUri(DatabaseId),
            collection,
            new RequestOptions { OfferThroughput = 1000 });
    }
    else
    {
        throw;
    }
}

此代码仍然抛出 DocumentClientException 和 410 状态代码。但是,当我尝试创建文档集合时,失败并显示 具有指定 id 或名称的资源已存在

我的搜索是否错误?我确实手动创建了集合,所以集合ID可能不同,但似乎很奇怪我无法在代码之外设置文档集合ID。

最佳答案

我建议使用DocumentCollectionQuery来检查它是否存在。 ReadDocumentCollectionAsync 并不完全相同。

您可以在 Cosmosnaut 的 CosmosCollectionCreator.cs 中查看它是如何完成的.

只需使用查询即可

var collection = _documentClient
            .CreateDocumentCollectionQuery(database.SelfLink)
            .ToArray()
            .FirstOrDefault(c => c.Id == collectionName);

然后创建它

collection = await _documentClient.CreateDocumentCollectionAsync(database.SelfLink, collection, new RequestOptions
        {
            OfferThroughput = collectionThroughput
        });

关于.net - Cosmos DB : Collection exists, 但抛出 410 GONE httpstatus 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50295597/

相关文章:

Azure Powershell 不创建具有多个端口的 NSG 规则

azure - 如何区分免费 Azure CosmosDB 帐户和付费帐户之间的区别?

azure - 如何使用服务器端的列投影将 Parquet 文件从 Azure Blob 读取到 Pandas DataFrame 中?

c# - 如何重命名 Cosmos DB 中的文档属性?

Azure Cosmos DB 模拟器 - SSL 证书无效

.net - 使用C#中的任务并行库,每个处理器运行一个并行任务

.net - WPF中有哪些不同的触发器?

.net - 无法使用 Visual Basic 将具有 12 位小数的 double /十进制值转换为字符串

.net - Silverlight 安全吗?

azure - CosmosDB 大小太大