如何解决Swagger Web 应用程序的 Azure Blob 提取错误
我有一个 web 应用程序,它生成像 Swagger 这样的文档,它尝试获取 blob 内容(例如 json)来呈现 API 定义。
存储帐户容器是一个私有容器,我设置了如下 CORS 规则:
对于 blob 检索:
public BlobStorageService(string connectionString)
{
if (string.IsNullOrWhiteSpace(connectionString))
{
throw new ArgumentException($"'{nameof(connectionString)}' cannot be null or whitespace",nameof(connectionString));
}
mBlobServiceClient = new BlobServiceClient(connectionString);
}
public async Task<string> GetBlobUri(string blobName,string tenant)
{
var blobContainerClient = await GetBlobContainerClient(tenant).ConfigureAwait(true);
var blockBlobReferance = blobContainerClient.GetBlockBlobClient(blobName);
return blockBlobReferance.Uri.ToString();
}
private async Task<BlobContainerClient> GetBlobContainerClient(string tenant)
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var containerClient = mBlobServiceClient.GetBlobContainerClient(tenant);
if (!await containerClient.ExistsAsync().ConfigureAwait(true))
{
containerClient = mBlobServiceClient.GetBlobContainerClient(Constants.cDefaultContainerName);
}
if (!await containerClient.ExistsAsync().ConfigureAwait(true))
{
throw new BlobContainerNotFoundException(tenant);
}
return containerClient;
}
我试着得到:
options.SwaggerEndpoint((await myBlobManager.GetBlobUri("myfile.json","container"),"Service namespace for myfile.json"); // here I get fetch error
如何解决问题?
解决方法
由于您的容器非公开,因此您无法使用 blob uri
(例如 https://myblob.blob.core.windows.net/container/myfile.json
)直接访问 blob。它会抛出“文件不存在”错误。
如果要访问私有容器中的 blob,应在 blob uri
的末尾附加 sas token。为此,您应该修改 GetBlobUri
方法中的代码,如下所示:
public async Task<string> GetBlobUri(string blobName,string tenant)
{
var blobContainerClient = await GetBlobContainerClient(tenant).ConfigureAwait(true);
var blockBlobReferance = blobContainerClient.GetBlockBlobClient(blobName);
//for blobs in private container,you should use code below to generate a sas token
var blob_sas_uri = blockBlobReferance.GenerateSasUri(BlobSasPermissions.All,new DateTimeOffset(DateTime.Now.AddDays(1))).ToString();
return blob_sas_uri;
}
另一种方式是,您可以set your container access level to public。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。