我希望我的数据访问层处理通过Microsoft.Azure.Documents.Client.DocumentClient
类提供的DocumentDB API抛出的异常。例如,使用AccessCondition类实施的乐观并发检查,但其他。
通过查看抛出的例外,识别不同 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,我应该/应该处理哪种魔术代码任何ErrorCodes
枚举或常数,也没有在文档中找到任何列表。
在哪里可以找到可能的 Error.Code
值documentclient api可以投掷的列表?
使其更加令人困惑,DocumentClient.CreateDocumentAsync
方法的XMLDOC建议在HTTP状态代码上工作。
更新:这个问题与HTTP状态代码无关,而是DocumentClientException.Error.Code
字段,因为我认为后者更精确。
在哪里可以找到可能的错误代码列表documentclient api可以投掷的列表?
很难找到DocumentClinet API投掷的完全错误代码列表。例外取决于您的要求。
例如,乐观的并发检查
azure cosmos db使用 etags 来处理乐观的并发。
当我们从Azure Cosmos DB中检索文档时,它总是包含ETAG属性。
然后,当我们要发送请求替换文档时,我们可以使用ETAG 指定访问权限我们在获取文档时收到的。
如果我们发送的ETAG不是当前的,则服务器将返回 412先决条件失败状态代码。在我们的.NET SDK中,将其包裹在A documentClientException 中。
这是一个示例,显示出并发时可能的问题。
通过对版本1.22.0客户端进行反编译,该代码设置为httpstatuscode enum。我认为可以在此处找到所有可能的值
但是,真正包含更丰富的调试信息的是错误。可能需要对整个库进行编译以找出,或者等待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;
}
}
有Azure Cosmos DB
的HTTP状态代码列表我在捕获块中使用以下代码
catch (DocumentClientException e)
{
var resp = new HttpResponseMessage
{
StatusCode = (HttpStatusCode) e.StatusCode,
Content = new StringContent(e.Message)
};
return resp;
}
让用户知道应在客户端应用程序上处理如何处理异常。