C# Azure Blob存储生成无效的共享访问签名

C# Azure Blob存储生成无效的共享访问签名,c#,azure,azure-storage-blobs,C#,Azure,Azure Storage Blobs,我使用下面的代码示例为存储在Azure Blob存储中的私有文件创建共享访问签名。生成的Url有时有效,但大多数情况下由于身份验证错误而无效 public async Task<string> GetFileUrl(string containerName, string fileName) { ICloudBlob blob = await GetBlob(containerName, fileName); string signature = blo

我使用下面的代码示例为存储在Azure Blob存储中的私有文件创建共享访问签名。生成的Url有时有效,但大多数情况下由于身份验证错误而无效

public async Task<string> GetFileUrl(string containerName, string fileName)
{    
     ICloudBlob blob = await GetBlob(containerName, fileName);

     string signature = blob.GetSharedAccessSignature(new SharedAccessBlobPolicy()
     {
           SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-5),
           SharedAccessExpiryTime = DateTime.UtcNow.AddDays(7),
           Permissions = SharedAccessBlobPermissions.Read
     });

     return blob.Uri.AbsoluteUri + signature;
}
以下是无法进行身份验证的URL的参数

sv=2016-05-31
sig=SbVzxo+dv28FvJP+Z9b1w6uvWUT72Pw1BSe3MIRooM0=
st=2017-03-30T11:52:35Z
se=2017-04-06T11:57:35Z
sr=b
sp=r
我发现了问题。 我在问题中没有提到,但生成SAS的代码是通过HTTTP客户端调用的,使用SAS访问Blob的URL位于响应的位置标头中

我正试图用

response.Headers.Location.ToString();
但是,我应该用

response.Headers.Location.OriginalString.ToString();

根据
Location.ToString()
返回URI的规范未转义形式。这就是为什么我的签名无效,并且签名中有类似
+
的字符。

您可以尝试删除开始时间吗?另外,请告诉我们您正在使用哪个版本的存储客户机库。实际上,我尝试添加它以解决此问题。它以前不存在,也不起作用。您是否正确地转义URI中的值?
+
字符可能会导致问题。我最近已经这样做了。唯一显著的区别是我使用了
UriBuilder
来构建
Uri
。因此,
new-UriBuilder(blob.Uri.AbsoluteUri){Query=signature}.Uri.AbsoluteUri
@It'satrap是的,这是一个愚蠢的错误,一如既往:)请看我的答案。谢谢大家的建议。
response.Headers.Location.OriginalString.ToString();