Blob SAS URI 字符在作为查询参数传递到 Azure 函数应用程序时解码
Posted
技术标签:
【中文标题】Blob SAS URI 字符在作为查询参数传递到 Azure 函数应用程序时解码【英文标题】:Blob SAS URI character decoded when passed as Query parameter to Azure Function app 【发布时间】:2021-07-28 17:49:41 【问题描述】:我想将图像文件的 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
上面的网址变成 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 时,我收到 错误:
System.Private.CoreLib:执行函数时出现异常:FUNCTIONNAME。 System.Net.Requests:远程服务器返回一个 错误:(403)服务器未能验证请求。确保 Authorization 标头的值正确形成,包括 签名..
我正在使用以下代码访问 URI
string image = req.Query["image"];
【问题讨论】:
【参考方案1】:在将图像 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);
这样您就可以获取原始网址。我已经测试过,它对我来说非常有效:
如果您还有其他问题,请告诉我。
【讨论】:
以上是关于Blob SAS URI 字符在作为查询参数传递到 Azure 函数应用程序时解码的主要内容,如果未能解决你的问题,请参考以下文章
用于复制到 Azure Blob 的 Azure SAS 授权参数是啥?
使用 SAS 将文件从 Azure Blob 存储下载到浏览器
Azure 存储帐户生成 SAS 令牌,而不是 SAS URI