Exception handling DocumentClientException.Error.Code可以包含哪些值?
我希望我的数据访问层能够处理通过Microsoft.Azure.Documents.Client.DocumentClient类提供的DocumentDB API引发的异常。例如,乐观并发检查是使用实现的,但也可以使用其他方法实现 通过查看抛出的异常,识别不同的Exception handling DocumentClientException.Error.Code可以包含哪些值?,exception-handling,azure-cosmosdb,azure-sdk-.net,Exception Handling,Azure Cosmosdb,Azure Sdk .net,我希望我的数据访问层能够处理通过Microsoft.Azure.Documents.Client.DocumentClient类提供的DocumentDB API引发的异常。例如,乐观并发检查是使用实现的,但也可以使用其他方法实现 通过查看抛出的异常,识别不同的DocumentClient特定异常的最佳方法似乎如下所示: try { ... } catch (DocumentClientException exception) when (exception.Error.Code ==
DocumentClient
特定异常的最佳方法似乎如下所示:
try { ... }
catch (DocumentClientException exception)
when (exception.Error.Code == "Some magic here")
{
//let the user know how to recover from this..
}
我不喜欢这种神奇的字符串,因为它们在编译时是不可验证的。它可能会出现输入错误,或者随着DocumentDB客户端/服务器的更改而随机更改,等等。此外,由于我没有看到Microsoft.Azure.DocumentDB.net API中包含任何错误代码
枚举或常量,所以我也不清楚我可以/应该处理哪些魔法代码,也没有在文档中找到任何列表
在哪里可以找到可能的错误列表。code
DocumentClient API可以抛出的值?
为了让它更加混乱,XmlDoc forDocumentClient.createdocumentsync
方法建议使用http状态代码
更新:这个问题不是关于Http状态代码,而是关于DocumentClientException.Error.code
字段,因为我认为后者更精确。有一个
我在catch块中使用以下代码
catch (DocumentClientException e)
{
var resp = new HttpResponseMessage
{
StatusCode = (HttpStatusCode) e.StatusCode,
Content = new StringContent(e.Message)
};
return resp;
}
应该在客户端应用程序上让用户知道如何处理异常
在哪里可以找到DocumentClient API可能抛出的错误代码值列表
很难找到DocumentClinet API抛出的完整错误代码列表。例外情况取决于您的请求
例如,乐观并发检查
Azure Cosmos DB使用etag处理乐观并发
当我们从Azure Cosmos DB检索文档时,它总是包含一个ETag属性作为文档的一部分
然后,当我们想要发送替换文档的请求时,我们可以使用提取文档时收到的ETag指定一个AccessCondition
如果我们发送的ETag不是最新的,服务器将返回412前置条件失败状态代码。在我们的.NET SDK中,这被封装在DocumentClientException中
下面是显示并发发生时可能出现的问题的示例。通过反编译1.22.0版客户端,代码被设置为HttpStatusCode枚举。我想所有可能的值都可以在这里找到 但是,真正包含更多调试信息的是Error.Message。可能需要对整个库进行反编译,或者等待Microsoft发布源代码,这是不可能的,因为github的最新更新是2或3年前
public Error Error
{
get
{
if (this.error == null)
{
this.error = new Error()
{
Code = this.StatusCode.ToString(),
Message = this.Message
};
}
return this.error;
}
}
一个很好的链接,但它是针对RESTAPI的,我希望在/for.NETAPI中有一些东西。另外,请注意,例如代码400和403,状态代码对于基本原因是如何不明确的。我希望这个错误。代码更详细。很高兴知道。尽管如此,但我的问题是关于DocumentClientException.Error.Code,而不是http状态码。是的,我问的是最难的部分。更新问题以强调我不关心具体的Etag条件,但是关于可能的
错误的一般概述。code
值。如果提供权威引用或令人信服的理由说明错误的原因,我会接受关于Http状态代码列表的答案。code
字段不应用于错误处理。这不是我希望的结果,但这确实解释了缺乏文档的原因——答案是可以接受的。请注意,Howard Edidin提供的链接似乎为CosmosDB的上下文提供了更多信息。