1

我开始认为这是一个错误,但我不确定。这是我的情况。

设置信息

我有一个允许上传到 Azure 存储 Blob 的网站,并且端点在 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. 我已经适当地更新了标签。

4

1 回答 1

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();
于 2013-03-26T21:31:23.483 回答