我正在编写v2 Azure函数,在其中我将访问Azure Blob存储。因为遇到麻烦,所以将其简化为这个最小的示例。

namespace Test
{
    public static class Function1
    {
        [FunctionName("Function1")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "test")] HttpRequest req,
            ILogger log)
        {
            var azureStorage = CloudStorageAccount.Parse("UseDevelopmentStorage=true");
            var blobClient = azureStorage.CreateCloudBlobClient();
            var container = blobClient.GetContainerReference("migrated-load-sets-localhost");
            var blobReference = container.GetBlockBlobReference("11016093-2f6e-4631-97c1-04f8acfb2370");
            var memoryStream = new MemoryStream();
            var accessCondition = AccessCondition.GenerateIfExistsCondition();
            var blobRequestOptions = new BlobRequestOptions();
            await blobReference.DownloadToStreamAsync(memoryStream, accessCondition, blobRequestOptions, null);
            var text = System.Text.Encoding.UTF8.GetString(memoryStream.ToArray());
            return new OkObjectResult(text);
        }
    }
}

当我跑步并撞到这个时,我得到了错误

System.Private.CoreLib:执行函数Function1时发生异常。 Microsoft.WindowsAzure.Storage:值'*'的格式无效。 System.Net.Http:值'*'的格式无效。

如果我改变
var accessCondition = AccessCondition.GenerateIfExistsCondition();

成为
var accessCondition = AccessCondition.GenerateEmptyCondition();

有用。

我在调试中观察到accessCondition.IfMatchETag等于"*",所以看来这可能是罪魁祸首。

使用AccessCondition.GenerateIfExistsCondition()时我做错什么了吗,还是库中有错误?

最佳答案

如果您需要在下载文件之前检查blob是否存在,则所需要做的只是

if(blobReference.ExistsAsync())
{
   //Download
}

10-07 21:38