CloudBlockBlob.DeleteAsync抛出异常

时间:2018-01-29 14:22:41

标签: c# azure azure-storage azure-storage-blobs azure-functions

我试图删除blob快照 - 我不想删除除了我有参考的快照以外的任何内容。

await snapshotBlob.DeleteAsync(DeleteSnapshotsOption.None,
                                       acc,
                                       new BlobRequestOptions(),
                                       new OperationContext());

我尝试了不同的DeleteSnapshotsOption,但异常告诉我在删除快照时只能使用DeleteSnapshotsOption.None

AccessConditionacc)只设置LeaseID

我没有BlobRequestOptionsOperationContext首选项;我也尝试将null传递给这两个属性,但没有区别。

方法调用抛出"远程服务器返回错误:(400)错误请求。"

堆栈追踪:

  

Microsoft.WindowsAzure.Storage.StorageException at   Microsoft.WindowsAzure.Storage.Core.Executor.Executor.EndExecuteAsync [T](IAsyncResult的   结果)在   Microsoft.WindowsAzure.Storage.Blob.CloudBlob.EndDelete(IAsyncResult的   asyncResult)at   Microsoft.WindowsAzure.Storage.Core.Util.AsyncExtensions<> c__DisplayClass4.b__3(IAsyncResult的   AR)   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)   System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter.GetResult()   在我的[行]中的StorageHooks.StorageBackup.d__0.MoveNext()   代码

任何人都可以解释我调用该方法的方式有什么问题吗?

另外,如果它有影响,我在Azure函数中调用此方法。此外,代码将现有的blob复制到另一个容器中,代码用于创建快照,创建新blob,上传到其他容器,复制元数据,获取租约......唯一失败的部分是删除快照

1 个答案:

答案 0 :(得分:1)

我尝试了你的代码并通过Fiddler追踪了请求/响应。当我在访问条件中指定了租约id时,我得到了400错误。当我查看详细信息时,这是错误消息告诉我的内容:

<?xml version="1.0" encoding="utf-8"?>
    <Error>
        <Code>InvalidQueryParameterValue</Code>
        <Message>
            Value for one of the query parameters specified in the request URI is invalid.
            RequestId:cb8bcb1d-001e-004a-4811-991d8e000000
            Time:2018-01-29T15:00:02.6030417Z
        </Message>
        <QueryParameterName>snapshot</QueryParameterName>
        <QueryParameterValue>2018-01-29T14:55:27.3537780Z</QueryParameterValue>
        <Reason>Leases are not allowed with snapshots.</Reason>
    </Error>

请从您的请求中删除访问条件来尝试您的请求。当我这样做时,请求就好了。所以你的代码是:

await snapshotBlob.DeleteAsync(DeleteSnapshotsOption.None)