我已经实现了一个 VirtualPathProvider 来从 Azure CDN 返回 Azure 网站的主题文件(图像、css)。除了一件事之外,它运行良好:来自 CDN 的文件都将其缓存控制属性设置为“私有”,因此永远不会被缓存。
实际的 blob 的属性设置正确,如果我通过它的直接 URL(即不通过 VPP)访问一个,那么缓存控制是正确的。
问题似乎出在我必须实现以将文件作为流返回的 VirtualFile 类的 Open() 方法中?
public override Stream Open()
{
CloudBlobClient client = new CloudBlobClient(cdnURL);
CloudBlob blob = client.GetBlobReference(blobURL);
blob.FetchAttributes();
MemoryStream stream = new MemoryStream();
BlobRequestOptions options = new BlobRequestOptions();
options.BlobListingDetails = BlobListingDetails.Metadata;
blob.DownloadToStream(stream,options);
stream.Seek(0, SeekOrigin.Begin);
return stream;
}
对此进行搜索,我发现大多数人都以另一种方式遇到问题 - 即文件在他们不希望它们存在时被缓存。但是,我能找到的所有示例都没有引用来自另一个 URL 的文件。他们似乎都使用数据库或只是不同的物理路径。