2013-03-26 61 views
0

我開始認爲這是一個錯誤,但我不確定。這是我的情況。CloudBlobClient.BaseUri爲什麼添加一個尾部斜線(有時)?

設置信息

我有一個網站,允許上傳到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); 

然後手頭

獲得這樣

this.cloudBlobClient = this.cloudStorageAccount.CreateCloudBlobClient(); 

問題向雲BLOB客戶參考這是我開始得到不同的結果。

如果我使用存儲模擬器端點(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/

注意最後的斜線。爲什麼不是在使用存儲模擬器時出現?或者爲什麼它使用真實帳戶時出現?

更新

我通過從網絡配置設置newing了一個開放的階梯,這是每一種情況下

{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

燦你不使用URI類來返回'AbsolutePath',它應該返回一個沒有尾部的字符串'/' – MethodMan 2013-03-26 20:51:33

+0

Negative。 '新的CloudStorageAccount'所需的參數是憑證+ uris – awbergs 2013-03-26 20:53:43

+0

受傷的部分是,即使輸入的格式相同(其初始化時沒有結尾的斜槓),輸入時的行爲也會不同。如果它是一致的,並且總是添加一個結尾斜槓,我不會爲它處理問題。 – awbergs 2013-03-26 20:59:47

回答

1

聽起來,可能導致這將是

PathAndQuery: "/" 

刪除和事情應該鍛鍊就好了嘛。 此外,如果你需要測試URI類,我寫你的東西非常快,您可以使用,將節省您大量的時間和頭痛在未來的測試,如果URI Class返回正確Host`

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(); 
相關問題