Blob SAS URI 字符在作为查询参数传递给 Azure Function 应用程序时解码

Blob SAS URI character decoded when passed as Query parameter to Azure Function app

我想将图像文件的 SAS URI 作为查询参数传递给 Azure Functions。 但是当我在 GET 调用中传递下面的 URL 时, 'sig' 部分的一些字符被解码 https://ABCD.blob.core.windows.net/images/test.jpg?sp=r&st=2021-05-06T11:30:21Z&se=2022-05-06T19:30:21Z&spr=https&sv=2020-02-10&sr=b&sig=JuPyAR%2F5WNeSVXj4G%2Fft9QDMzL%2BtXSywSS375jZpjXQ%3D

上面的URL就变成了 https://ABCD.blob.core.windows.net/images/test.jpg?sp=r&st=2021-05-06T11:30:21Z&se=2022-05-06T19:30:21Z&spr=https&sv=2020-02-10&sr=b&sig=JuPyAR/5WNeSVXj4G/ft9QDMzL+tXSywSS375jZpjXQ=

%2F 至/ %2B 至 + %3D =

因此,当我尝试访问 blob 时,出现 error:

System.Private.CoreLib: Exception while executing function: FUNCTIONNAME. System.Net.Requests: The remote server returned an error: (403) Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature..

我正在使用以下代码访问 URI

string image = req.Query["image"];

在将图像 URL 作为请求参数发送到 Azure 函数之前,请使用 base64 对整个 URL 进行编码,然后在您的 Azure 函数中对其进行解码,如下所示:

string image = req.Query["image"];

string base64Encoded = image;
string base64Decoded;
byte[] data = System.Convert.FromBase64String(base64Encoded);
base64Decoded = System.Text.ASCIIEncoding.ASCII.GetString(data);
log.LogInformation(image);
log.LogInformation(base64Decoded);

这样就可以得到原文URL。我已经在我这边测试过了,它非常适合我:

如果您还有其他问题,请告诉我。