成功重写了图像URL,但内容未被缓存

时间:2016-12-20 11:46:48

标签: asp.net caching url-rewriting

在Microsoft Azure上托管的ASP.net应用程序。已成功重写图像文件的URL - 例如:

/file/i/Logo/fed88a06-1157-4bbb-826d-365bdd8c89eb/png/logo.png

这些在Web应用程序中正确显示 - 因此重写工作正常。

但是,我无法在浏览器中一致地缓存这些图像:

  • Safari显示网站上使用的静态图像(例如页脚徽标)缓存正常,但没有重写内容;每次都加载。
  • 然而,
  • Chrome似乎在mac上缓存内容并且不会重新加载任何内容 - 很棒。
  • Firefox不会像Safari一样缓存任何动态内容。

我尝试了各种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));
}

0 个答案:

没有答案