Я реализовал VirtualPathProvider для возврата файлов тем (изображений, css) для веб-сайта Azure из Azure CDN. Он отлично работает, кроме одной вещи: все файлы, поступающие из CDN, имеют свойство управления кэшем, установленное на "private", и поэтому никогда не кэшируются.
У реальных BLOB-объектов их свойства установлены правильно, и если я обращаюсь к ним по прямому URL-адресу (т. Е. Не через VPP), то управление кешем является правильным.
Кажется, проблема в методе Open () класса VirtualFile, который я должен реализовать, чтобы вернуть файл в виде потока?
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. Кажется, они все используют базы данных или просто разные физические пути.