4

我们正在使用隐藏的内部站点系统。对于隐藏路径,我们使用 HttpContext.RewritePath。还有一个上传照片的系统,生成新的名字,照片没有机会改变。我们想为这些照片使用客户端缓存。

现场网址,用户可见:/files/autoupload/1/13/wufkjqr31028.jpg.[ps].jpg

服务器上 HttpContext.RewritePath 之后的 URL:/_sites/_shared/files/autoupload/1/13/wufkjqr31028.jpg.[ps].jpg

“/_sites/_shared/files”文件夹中有 web.config 和客户端缓存设置:

<system.webServer>
    <staticContent>
        <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" />
    </staticContent>
</system.webServer>

如果请求“/files/autoupload/1/13/wufkjqr31028.jpg.[ps].jpg” url,则此设置根本不适用。响应中没有 Cache-Control 标头。

如果请求完整的 url "/_sites/_shared/files/autoupload/1/13/wufkjqr31028.jpg.[ps].jpg" 并且我们的 HttpContext.RewritePath 跳过它,则缓存设置有效。

但是,如果我使用相同的 web.config 在根目录中创建“/files”文件夹,缓存设置将开始使用原始的“/files/autoupload/1/13/wufkjqr31028.jpg.[ps].jpg”url。

因此 web.config 客户端缓存设置仅适用于最初请求的磁盘路径,不适用于重写路径。

除了在 r​​oot 中创建文件夹之外,还有什么方法可以解决这个问题?

4

1 回答 1

0

您的 web.configstaticContent在您重写 url 时有一个配置元素,使其成为动态的,因此您的配置不适用。

可以创建自己的 HTTP 处理程序并将其映射到您想要的任何文件扩展名。在处理程序的实现中,您几乎可以设置任何 HTTP 标头,在您的情况下是缓存控制标头。请参阅此处的 IHttpHandler 接口 和此处有关配置它的信息, 请参阅此处的第 14.9 节缓存控制

于 2013-07-21T08:34:15.380 回答