我很确定这是Windows Azure SDK的限制(使用最新的1.4版),但是必须有一种解决方法,而不使用手动REST ...
代码:
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
从我的测试中可以清楚地看出,由于这些破折号,客户端正在爆炸,但我无法想到这一点。设置缓存控制非常重要,常见的操作让我感到困惑,为什么我找不到其他人报告这个问题。
我也尝试过对数据进行编码,这在技术上不应该是必要的,但出于绝望,无论如何我都是这样做的。想法?
答案 0 :(得分:3)
它毕竟是一个愚蠢的SDK限制,有一个特定的属性反过来为你设置特定的元数据......我不介意将这个属性作为帮助,但我看不出为什么直接设置元应该不起作用。
blob.Properties.CacheControl = "public, max-age=259200";
blob.UploadByteArray(bytes);