如何使用weserver配置设置禁用IIS 7中单个文件的缓存

Dea*_*ean 37 xml iis iis-7 caching azure

有没有办法在我的ASP.NET应用程序中缓存单个javascript文件的缓存而不禁用应用程序中任何其他文件的缓存?

它在Azure中的IIS 7上运行,所以对我而言,我唯一的控制它的选项是在webserver标签内.

我目前使用folowwing配置,但这是禁用所有文件的缓存.

     <modules runAllManagedModulesForAllRequests="true"/>

    <staticContent>
      <clientCache cacheControlMode="DisableCache"/>
    </staticContent>

  </system.webServer>
Run Code Online (Sandbox Code Playgroud)

我只是想禁用一个经常更改的单个javascript文件的缓存.

可能吗?

gdt*_*gdt 47

我偶然发现了这个问题; 您可以使用以下命令禁用特定文件上的缓存:

<configuration>
  <location path="path/to/the/file">
    <system.webServer>
      <staticContent>
        <clientCache cacheControlMode="DisableCache" />
      </staticContent>
    </system.webServer>
  </location>
</configuration>
Run Code Online (Sandbox Code Playgroud)

(注意路径是相对于web.config文件的)

或者,将单个文件放在它自己的目录中,并为该目录提供它自己的web.config,禁用其中的所有内容的缓存;

<configuration>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Cache-Control" value="no-cache" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)

[两者都在Windows 7上的IIS7.5上进行了测试,但您必须确认它在Azure上运行正常]

  • 我做了第一个替代方案,它适用于Azure. (3认同)
  • 通过源代码控制或持续集成发布到Azure Web App的静态上下文非常适用。在我的情况下,一个Angular CLI构建的应用程序在其中,生产版本负责为捆绑文件创建缓存清除名称,而我只希望index.html不缓存。谢谢! (3认同)

Tay*_*ird 8

您将要查看System.WebServer/Caching类,您可以在其中将缓存配置文件应用于特定扩展.这将至少使您能够控制以.js结尾的所有Javascript文件.

<system.webServer>
...

   <caching>
      <add extension=".js" policy="DontCache" kernelCachePolicy="DontCache" />
   </caching>

</system.webServer>
Run Code Online (Sandbox Code Playgroud)

这应该禁用来自云的进程和内核缓存的.js缓存.

认为您可以在仅包含您的文件的文件夹中创建此web.config,它将仅在该文件夹级别禁用.js的缓存.老实说我自己也没试过,所以只是你可以测试的建议.


除此之外,请查看与缓存配置相关的IIS文档:

/缓存:http://www.iis.net/ConfigReference/system.webServer/caching

/缓存/配置文件:http://www.iis.net/ConfigReference/system.webServer/caching/profiles

/ Caching/Profiles/Add:http://www.iis.net/ConfigReference/system.webServer/caching/profiles/add

希望这一点,加上对这些配置标签的一些研究将有所帮助.

如果没有,我建议您考虑实现一个可以插入IIS请求管道的自定义HTTP模块,它可以将缓存控制过滤到该特定文件

**它的价值仅在于IIS的行为,并且在Azure内外不会有所不同,因此您可以轻松地测试本地,而无需使用Dev结构或Azure测试.


Wha*_*ool 8

看起来上面的答案缺少"个人资料"标签

<caching>
  <profiles>
    <add extension=".js" kernelCachePolicy="DontCache" policy="DontCache"/>
  </profiles>
</caching>
Run Code Online (Sandbox Code Playgroud)


Mar*_*ijn 5

您可以通过在该文件夹中包含一个 web.config 来删除文件夹级别的扩展,从而禁用文件夹级别的输出缓存

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
        <caching>
            <profiles>
                <remove extension=".js" />
            </profiles>
        </caching>

  </system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)

现在此文件夹将不会为以 .js 结尾的文件启用输出缓存