C# Azure存储容器ListBlobs在将存储升级到4.0.1后引发Uri NULL异常

C# Azure存储容器ListBlobs在将存储升级到4.0.1后引发Uri NULL异常,c#,azure,azure-storage,C#,Azure,Azure Storage,当我将azure存储从1.8升级到4.0.1时,以下代码不再有效 var myUri = new Uri(generatedURLwithSAS); var sasContainer = new CloudBlobContainer(myUri); var result0 = sasContainer.ListBlobs(); Console.WriteLine(result0); 对于存储4.0.1,代码抛出异常: Exception Type: Microsoft.WindowsAzure

当我将azure存储从1.8升级到4.0.1时,以下代码不再有效

var myUri = new Uri(generatedURLwithSAS);
var sasContainer = new CloudBlobContainer(myUri);
var result0 = sasContainer.ListBlobs();
Console.WriteLine(result0);
对于存储4.0.1,代码抛出异常:

Exception Type: Microsoft.WindowsAzure.Storage.StorageException
Exception: Value cannot be null.
Parameter name: uriString
Stack Trace: 
at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd,     IRetryPolicy policy, OperationContext operationContext)
at Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer.<>c__DisplayClassf.<ListBlobs>b__e(IContinuationToken token)at Microsoft.WindowsAzure.Storage.Core.Util.CommonUtility.<LazyEnumerable>d__0`1.MoveNext()

Exception Type: System.ArgumentNullException
Exception: Value cannot be null.
Parameter name: uriString
Stack Trace: 
at System.Uri..ctor(String uriString)
at Microsoft.WindowsAzure.Storage.Blob.Protocol.ListBlobsResponse.<ParseXml>d__0.MoveNext()
at Microsoft.WindowsAzure.Storage.Shared.Protocol.ResponseParsingBase`1.<ParseXmlAndClose>d__6.MoveNext()
at Microsoft.WindowsAzure.Storage.Shared.Protocol.ResponseParsingBase`1.<get_ObjectsToParse>d__0.MoveNext()
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer.<ListBlobsImpl>b__4a(RESTCommand`1 cmd, HttpWebResponse resp, OperationContext ctx)
at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ProcessEndOfRequest[T](ExecutionState`1 executionState)
at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext)
异常类型:Microsoft.WindowsAzure.Storage.StorageException
异常:值不能为null。
参数名称:uriString
堆栈跟踪:
在Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd,IRetryPolicy策略,OperationContext OperationContext)
位于Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer.c_uuDisplayClassF.b_ue(IContinuationToken token token),位于Microsoft.WindowsAzure.Storage.Core.Util.CommonUtility.d_u0`1.MoveNext()
异常类型:System.ArgumentNullException
异常:值不能为null。
参数名称:uriString
堆栈跟踪:
在System.Uri..ctor处(字符串uriString)
在Microsoft.WindowsAzure.Storage.Blob.Protocol.ListBlobsResponse.d_u0.MoveNext()中
在Microsoft.WindowsAzure.Storage.Shared.Protocol.ResponseParsingBase`1.d_u6.MoveNext()上
在Microsoft.WindowsAzure.Storage.Shared.Protocol.ResponseParsingBase`1.d_u0.MoveNext()上
在System.Linq.Enumerable.WhereSelectEnumerableInterator`2.MoveNext()中
位于System.Collections.Generic.List`1..ctor(IEnumerable`1集合)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
在Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer.b__4a(RESTCommand`1 cmd,HttpWebResponse resp,OperationContext ctx)
位于Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ProcessEndOfRequest[T](ExecutionState`1 ExecutionState)
在Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd,IRetryPolicy策略,OperationContext OperationContext)
你知道怎么让它工作吗

我知道我可以使用account和accountkey创建凭据来访问容器和列出blob,但我想知道如何仅使用SAS的blob路径来实现这一点


如有任何建议,将不胜感激

下面提供的SAS令牌是使用旧版本的存储客户端库生成的。客户端库只能与一个版本的REST协议进行通信。使用旧客户端生成的SAS令牌强制旧REST版本的服务端进行操作,但新客户端使用2014 REST版本语义来解释响应。 这是因为在这些REST版本之间的ListBlobsXML响应中发生了中断性更改,因此新的客户端库无法正确解析该XML

以下是有关SAS令牌的一些可能有用的更改的更多信息,包括api版本参数:

请尝试使用4.0.1版本的客户端库重新生成令牌,您的代码应按预期工作