【问题标题】:Blob SAS URI character decoded when passed as Query parameter to Azure Function appBlob SAS URI 字符在作为查询参数传递到 Azure 函数应用程序时解码
【发布时间】: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"];

【问题讨论】:

    标签: azure-functions azure-blob-storage query-parameters azure-sas


    【解决方案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);
    

    这样您就可以获取原始网址。我已经测试过,它对我来说非常有效:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-13
      • 2016-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      相关资源
      最近更新 更多