我开始认为这是一个错误,但我不确定。这是我的情况。
设置信息
我有一个允许上传到Azure存储Blob的网站,并且在Web配置中指定了端点。基本Web配置包含
<blobEndpoint value="http://127.0.0.1:10000/devstoreaccount1" />
测试服务器Web配置包含
<blobEndpoint value="https://myazureaccount.blob.core.windows.net" xdt:Transform="Replace" />
我有一个自定义配置处理程序来从Web配置中检索值,如此
[ConfigurationProperty("blobEndpoint", IsRequired = true)]
public StringConfigurationElement BlobEndpoint
{
get
{
return (StringConfigurationElement)base["blobEndpoint"];
}
set
{
base["blobEndpoint"] = value;
}
}
我获得了对此存储帐户的引用
StorageCredentialsAccountAndKey credentials =
new StorageCredentialsAccountAndKey(
CloudStorageAccount.CloudStorageAccountName,
CloudStorageAccount.CloudStorageAccountKey);
this.cloudStorageAccount = new CloudStorageAccount(credentials,
CloudStorageAccount.BlobEndpoint,
CloudStorageAccount.QueueEndpoint,
CloudStorageAccount.TableEndpoint);
然后获取对此类
的云blob客户端的引用this.cloudBlobClient = this.cloudStorageAccount.CreateCloudBlobClient();
手头的问题
这是我开始得到不同结果的地方。
如果我使用存储模拟器端点(http://127.0.0.1:10000/devstoreaccount1
)并进行此调用
this.cloudBlobClient.BaseUri
返回值为http://127.0.0.1:10000/devstoreaccount1
但是,如果我使用我的实际帐户端点(https://myazureaccount.blob.core.windows.net
)并进行相同的调用,则返回值为https://myazureaccount.blob.core.windows.net/
。
注意最后的斜杠。使用存储模拟器uri时为什么不?或者,为什么 在使用真实账户uri时会出现?
更新
我从网络配置设置中逐步修改了一个Uri,这是每个案例的输出
{https://myazureaccount.blob.core.windows.net/}
AbsolutePath: "/"
AbsoluteUri: "https://myazureaccount.blob.core.windows.net/"
Authority: "myazureaccount.blob.core.windows.net"
DnsSafeHost: "myazureaccount.blob.core.windows.net"
Fragment: ""
Host: "myazureaccount.blob.core.windows.net"
HostNameType: Dns
IsAbsoluteUri: true
IsDefaultPort: true
IsFile: false
IsLoopback: false
IsUnc: false
LocalPath: "/"
OriginalString: "https://myazureaccount.blob.core.windows.net"
PathAndQuery: "/"
Port: 443
Query: ""
Scheme: "https"
Segments: {string[1]}
UserEscaped: false
UserInfo: ""
{http://127.0.0.1:10000/devstoreaccount1}
AbsolutePath: "/devstoreaccount1"
AbsoluteUri: "http://127.0.0.1:10000/devstoreaccount1"
Authority: "127.0.0.1:10000"
DnsSafeHost: "127.0.0.1"
Fragment: ""
Host: "127.0.0.1"
HostNameType: IPv4
IsAbsoluteUri: true
IsDefaultPort: false
IsFile: false
IsLoopback: true
IsUnc: false
LocalPath: "/devstoreaccount1"
OriginalString: "http://127.0.0.1:10000/devstoreaccount1"
PathAndQuery: "/devstoreaccount1"
Port: 10000
Query: ""
Scheme: "http"
Segments: {string[2]}
UserEscaped: false
UserInfo: ""
似乎这实际上是Uri
类的问题,与CloudBlobClient
无关。我已适当更新了标签。
答案 0 :(得分:1)
听起来唯一可能造成这种情况的是
PathAndQuery: "/"
删除它,事情应该锻炼得很好。
此外,如果你需要测试URI类我写了一些非常快的东西,你可以使用它可以节省你很多时间和未来的头痛,如果URI Class
返回正确的主机`
var uriList = new List<string>()
{
"https://myazureaccount.blob.core.windows.net",
"https://myazureaccount1.blob.core.windows.net",
"https://myazureaccount2.blob.core.windows.net"
};
var holdList = uriList.Select(uriName => new Uri(uriName)).Select(uri => uri.Host).ToList();