我试图删除blob快照 - 我不想删除除了我有参考的快照以外的任何内容。
await snapshotBlob.DeleteAsync(DeleteSnapshotsOption.None,
acc,
new BlobRequestOptions(),
new OperationContext());
我尝试了不同的DeleteSnapshotsOption
,但异常告诉我在删除快照时只能使用DeleteSnapshotsOption.None
。
AccessCondition
(acc
)只设置LeaseID
。
我没有BlobRequestOptions
或OperationContext
首选项;我也尝试将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,上传到其他容器,复制元数据,获取租约......唯一失败的部分是删除快照
答案 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)