.net 正在将文件上载到Azure Blob存储,获取错误-请求未被授权执行此操作,AuthorizationFailure

xytpbqjk  于 2023-04-22  发布在  .NET
关注(0)|答案(1)|浏览(161)

我尝试使用Web API将文件上传到blob存储容器。我可以使用相同的密钥上传到它,在控制台应用程序中,但在Web API中我得到错误“此请求未被授权执行此操作,授权失败”。blob访问设置为“从选定的虚拟网络和IP地址启用”&我已经将我的IP添加到blob n/w设置。如果我将blob网络访问更改为“从所有网络启用”,那么Web API也可以工作。我可以从控制台应用程序上传文件,无论是公共访问还是选定的IP地址访问。
我的.net 6 Web API代码如下:

//In Program.cs of web api
builder.Services.AddScoped(serviceProvider => new BlobServiceClient(blobStorageCon));

//In BlobService
public BlobService(BlobServiceClient blobServiceClient, IConfiguration configuration)
{
    _configuration = configuration;
    _blobServiceClient = blobServiceClient;
}

//The Upload method

public async Task<Uri> UploadFileBlobAsync(Stream content, string contentType, string fileName)
{
    string blobContainerName = _configuration["AppSettings:AzureBlobContainer"];
    var containerClient = _blobServiceClient.GetBlobContainerClient(blobContainerName);

    var blobClient = containerClient.GetBlobClient(fileName);
    await blobClient.UploadAsync(content, true); //Fails here

    return blobClient.Uri;
}

请注意:-
1.我已经尝试在控制台应用程序中访问Blob,并且(改编的)代码可以访问Blob。
1.作为一个测试,我把blob设置为公共的,然后API可以上传到azureblob,但是我不被允许这么做。

s3fp2yjn

s3fp2yjn1#

在这个问题上浪费了半天时间之后,我终于解决了这个问题。这个问题不是我的代码,而是因为我在VPN上,我使用ipconfig找到的IP地址不是我真实的的公共IP。一旦我从VPN断开连接并使用curl myexternalip.com/raw确定了我正确的公共IP,我就在Azure存储帐户的防火墙设置中允许这个IP。在此之后,它就像一个魅力一样工作了。

相关问题