从Azure存储1.7升级到2.0时出现问题

从Azure存储1.7升级到2.0时出现问题,azure,azure-storage,azure-storage-blobs,Azure,Azure Storage,Azure Storage Blobs,我目前正参与从Azure 1.7升级到2.2的过程,在存储方面遇到了突破性的变化。库中的所有存储调用都包含在单元测试中,我已经完成了大部分更改 我完全被我们的一个核心方法卡住了,它在一个目录中获得一个子目录列表。我知道它们不是实际的目录,而是blob名称的一部分,但功能在2.0之前就存在,我们在近30个不同的服务中大量使用了它 存储blob地址为 testdata/test/test1/blob.txt 测试呢 /// Unit Test [Test] public void BuildDire

我目前正参与从Azure 1.7升级到2.2的过程,在存储方面遇到了突破性的变化。库中的所有存储调用都包含在单元测试中,我已经完成了大部分更改

我完全被我们的一个核心方法卡住了,它在一个目录中获得一个子目录列表。我知道它们不是实际的目录,而是blob名称的一部分,但功能在2.0之前就存在,我们在近30个不同的服务中大量使用了它

存储blob地址为 testdata/test/test1/blob.txt

测试呢

/// Unit Test
[Test]
public void BuildDirectoryAndRetrieveUsingSubDirectory()
{
  CloudBlobDirectory subDirectory = GetBlobDirectory("testdata/test/");
  IEnumerable<CloudBlobDirectory> dirs = 
    subDirectory.ListBlobs().OfType<CloudBlobDirectory>();
  Assert.AreEqual(1, dirs.Count());
}
我试图通过使用2.0获得相同的结果,但徒劳无功

/// Azure Storage 2.0
public static CloudBlobDirectory GetBlobDirectory(string directoryReference)
{
  string containerName = GetContainerNameFromDirectoryName(directoryReference);
  CloudBlobContainer container = BlobClient.GetContainerReference(containerName);
  return container.GetBlobDirectoryReference(directoryReference);
}
然而,回到测试中,dirs只返回“枚举未产生任何结果”

有人能帮忙吗?我非常想让测试代码不受影响,但从方法返回相同的结果


谢谢

找到了答案,答案出人意料地简单

在StorageClient 1.7中,传入的前缀值包括容器名称,必须以“/”结尾

因此,基本上containerName变成“testdata”,directoryPrefix变成“test”

在最新版本中,前缀值不包括容器名称,因此函数已更改为

public static CloudBlobDirectory GetBlobDirectory(string directoryReference)
{
    string containerName = GetContainerNameFromDirectoryName(directoryReference);
    string directoryPrefix = GetPrefixFormDirectoryName(directoryReference);
    CloudBlobContainer container = BlobClient.GetContainerReference(containerName);
    var blobs = container.ListBlobs(directoryPrefix, false);
    return (CloudBlobDirectory)blobs.Where(b => b as CloudBlobDirectory !=null).First();
}

GetContainerNameFromDirectoryName
GetPrefixFormDirectoryName
是否只是使用子字符串获取容器名称和目录前缀的方法?
public static CloudBlobDirectory GetBlobDirectory(string directoryReference)
{
    string containerName = GetContainerNameFromDirectoryName(directoryReference);
    string directoryPrefix = GetPrefixFormDirectoryName(directoryReference);
    CloudBlobContainer container = BlobClient.GetContainerReference(containerName);
    var blobs = container.ListBlobs(directoryPrefix, false);
    return (CloudBlobDirectory)blobs.Where(b => b as CloudBlobDirectory !=null).First();
}