2011-07-30 25 views
0

我敢肯定,這是在Windows Azure SDK的限制(使用最新的,1.4),但一定是解決的辦法,而無需使用人工REST ...Azure CloudBlob SetMetadata將失敗,並顯示「指定的元數據無效,它具有不允許的字符。」

代碼:

CloudBlob blob = container.GetBlobReference(url); // works 
blob.UploadByteArray(bytes); // works 
blob.Metadata["test"] = "public, max-age=259200"; // works 
// FAILS with "The metadata specified is invalid. It has characters that are not permitted." 
blob.Metadata["x-ms-blob-cache-control"] = "public, max-age=259200"; 
blob.SetMetadata(); // FAILS due to the 2nd meta data 

從我的測試中可以清楚地看到客戶端由於這些破折號而爆炸了,但我想不出有什麼辦法解決這個問題。設置緩存控制是非常重要的,常見的操作,這讓我感到困惑,爲什麼我找不到其他人報告這個問題。

我也嘗試編碼數據,技術上不應該是必要的,但出於絕望,我反正做了。想法?

回答

3

它終究是一個愚蠢的SDK限制畢竟,有一個特定的屬性,爲您設置特定的元數據...我不介意有這個屬性作爲一個幫手,但我沒有看到任何理由爲什麼直接設置meta不應該起作用。

blob.Properties.CacheControl = "public, max-age=259200"; 
blob.UploadByteArray(bytes); 
+2

元數據是從不同標題...如果允許,blob.Metadata [ 「X-MS-團塊-緩存控制」]將發出的「報頭X-MS-元X-MS-斑點-cache控制」。 (「x-ms-meta」是專門用於將元數據與其他類型標題區分開來的。) – smarx

+3

通常,請注意,有關元數據的規則是密鑰必須遵循C#標識符命名規則:http:// msdn。 microsoft.com/en-us/library/dd179414.aspx。 (這就是爲什麼你有錯誤。) – smarx

相關問題