我想通过 Azure Blob 容器的 C# 代码动态生成 SAS URL。使用此 SAS URL 我们必须能够上传文件

I want to generate SAS URL dynamically via C# code for Azure Blob Container. Using this SAS URL we must be able to upload the files

我想通过 C# 代码为 Azure Blob 容器动态生成 SAS URL。使用此 SAS URL 我们必须能够将文件上传到 Azure Blob 容器。我已经按照 Microsoft 文档尝试了多种生成 SAS URL 的方法。但我总是收到 AuthorizationResourceTypeMismatch 错误或 AuthorizationPermissionMismatch。

错误:AuthorizationPermissionMismatch此请求无权使用此权限执行此操作。

private static Uri GetServiceSasUriForContainer(BlobContainerClient containerClient,
                                          string storedPolicyName = null)
        {
            // Check whether this BlobContainerClient object has been authorized with Shared Key.
            if (containerClient.CanGenerateSasUri)
            {
                // Create a SAS token that's valid for one hour.
                BlobSasBuilder sasBuilder = new BlobSasBuilder()
                {
                    BlobContainerName = containerClient.Name,
                    Resource = "c"
                };

                if (storedPolicyName == null)
                {
                    sasBuilder.ExpiresOn = DateTimeOffset.UtcNow.AddHours(1);
                    sasBuilder.SetPermissions(BlobContainerSasPermissions.Read);
                }
                else
                {
                    sasBuilder.Identifier = storedPolicyName;
                }

                Uri sasUri = containerClient.GenerateSasUri(sasBuilder);
                Console.WriteLine("SAS URI for blob container is: {0}", sasUri);
                Console.WriteLine();

                return sasUri;
            }
            else
            {
                Console.WriteLine(@"BlobContainerClient must be authorized with Shared Key 
                          credentials to create a service SAS.");
                return null;
            }
        }

错误:AuthenticationFailed服务器无法验证请求。确保授权值 header 的格式正确,包括签名。

我需要这个 sas url 因为我在我的 javascript 中使用这个 url 将文件上传到 Azure Blob 容器。 有人可以帮助我实现这个目标吗?

您收到此错误的原因是您使用 Read 权限 (BlobContainerSasPermissions.Read) 创建 SAS 令牌。

为了使用 SAS URL 在容器中上传 blob,SAS 令牌需要 Write (BlobContainerSasPermissions.Write) 或 Create (BlobContainerSasPermissions.Create) 允许。请创建具有这些权限之一的 SAS 令牌,您应该不会收到此错误。

要了解有关权限的更多信息,请参阅此 link:https://docs.microsoft.com/en-us/rest/api/storageservices/create-service-sas#permissions-for-a-directory-container-or-blob