在Microsoft Azure上托管的ASP.net应用程序。已成功重写图像文件的URL - 例如:
/file/i/Logo/fed88a06-1157-4bbb-826d-365bdd8c89eb/png/logo.png
这些在Web应用程序中正确显示 - 因此重写工作正常。
但是,我无法在浏览器中一致地缓存这些图像:
我尝试了各种web.config缓存规则,但似乎无法使其正常工作。
这是当前的web.config重写规则:
<rule name="Cache friendly file links" stopProcessing="false">
<match url="^file\/i\/([0-9a-zA-Z-]+)\/([_0-9a-zA-Z-]+)\/([0-9A-Za-z-]{36})\/([0-9A-Za-z-]{2,})\/([_0-9A-Za-z-\%\+]+)\.([0-9A-Za-z-]{2,})" />
<action type="Rewrite" url="file/image?{R:1}.{R:2}/{R:3}.{R:4}?{R:5}.{R:6}" appendQueryString="false" />
</rule>
在SharedActionsController中,我们有:
[Route("file/image")]
[EditorBrowsable(EditorBrowsableState.Never)]
[OutputCache(Duration = 31536000, Location = System.Web.UI.OutputCacheLocation.Any)]
public ActionResult GetImage()
{
var path = Request.Url.Query.TrimStart('?');
var accessor = new FileAccessor(path, User);
if (!accessor.IsAllowed())
{
return new HttpUnauthorizedResult(accessor.SecurityErrors);
}
return File(accessor.Document.FileData, MimeMapping.GetMimeMapping(accessor.Document.FileName));
}