Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Exception handling DocumentClientException.Error.Code可以包含哪些值?_Exception Handling_Azure Cosmosdb_Azure Sdk .net - Fatal编程技术网

Exception handling DocumentClientException.Error.Code可以包含哪些值?

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 ==

我希望我的数据访问层能够处理通过Microsoft.Azure.Documents.Client.DocumentClient类提供的DocumentDB API引发的异常。例如,乐观并发检查是使用实现的,但也可以使用其他方法实现

通过查看抛出的异常,识别不同的
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 for
DocumentClient.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的上下文提供了更多信息。