我有一个 ADLS,其中包含我想在我的网站上显示的图像。我想通过 APIM 公开它们。我在请求中发送图像名称和 SAS 令牌,我用正确的文件夹结构在实际后端请求中重写。
政策 -
<policies>
<inbound>
<set-variable name="BlobName" value="@(context.Request.Url.Query.GetValueOrDefault("BlobName"))" />
<set-variable name="sasToken" value="@(System.Net.WebUtility.UrlDecode(context.Request.Url.Query.GetValueOrDefault("sasToken")))" />
<base />
<set-backend-service base-url="@{
string blobName = context.Variables.GetValueOrDefault<string>("BlobName");
string sasToken = context.Variables.GetValueOrDefault<string>("sasToken");
return String.Format("https://myadls.blob.core.windows.net/UserImages/Images/{0}?{1}",blobName,sasToken);
}" />
<authentication-managed-identity resource="https://storage.azure.com/" />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
The SAS token - sv=2020-08-04&st=2022-02-24T04%3A17%3A53Z&se=2022-02-24T06%3A17%3A53Z&sr=c&sp=r&sig=5B6IUrj9VSh7oZSHAOKQK7fsWLun%2B%2BL7v0o1gQJHxvU%3D
由于 SAS 令牌和“&”符号,sasToken 字符串被截断为“sv=2020-08-04”
正如您在策略中看到的那样,我尝试在 c# 中将 SAS 编码为
System.Net.WebUtility.UrlEncode(dataLakeSasBuilder.ToSasQueryParameters(sharedKeyCredential).ToString());
但是, System.Net.WebUtility.UrlDecode 没有解码该值。
提前致谢。