无法使ASP.NET/IIS为具有自定义缓存控制设置的.js文件提供服务

无法使ASP.NET/IIS为具有自定义缓存控制设置的.js文件提供服务,asp.net,iis,Asp.net,Iis,在我的ASP.NET MVC 5应用程序中,我使用了clientCacheweb.config属性来自定义静态文件的缓存行为 这对于.css和图像文件来说效果很好,但是我注意到在我的浏览器的开发工具中,.js文件没有获得其他文件类型所获得的自定义缓存控件和etag头 此外,我还尝试添加一个自定义处理程序,但据我所知没有任何效果 关于如何让ASP.NET/IIS以与其他静态文件相同的方式处理.js文件,有什么想法吗? <system.webServer> <

在我的ASP.NET MVC 5应用程序中,我使用了
clientCache
web.config属性来自定义静态文件的缓存行为


这对于.css和图像文件来说效果很好,但是我注意到在我的浏览器的开发工具中,.js文件没有获得其他文件类型所获得的自定义
缓存控件
etag

此外,我还尝试添加一个自定义处理程序,但据我所知没有任何效果


关于如何让ASP.NET/IIS以与其他静态文件相同的方式处理.js文件,有什么想法吗?


<system.webServer>  
    <staticContent>  
      <clear/>  
      <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="00:01:00" />  
      <mimeMap fileExtension=".jpg" mimeType="image/jpg"/>  
      <mimeMap fileExtension=".png" mimeType="image/jpg"/>  
      <mimeMap fileExtension=".css" mimeType="text/css"/>  
      <mimeMap fileExtension=".js" mimeType="text/javascript"/>  
    </staticContent>  
    <validation validateIntegratedModeConfiguration="false" />  
</system.webServer>  

我通过添加特定于路径的配置来清除所有处理程序,并仅将静态文件默认值添加到这些路径,从而解决了这个问题。这是一个不完美的解决方案,因为它基于文件路径,而不是文件类型,但是因为我所有的JavaScript文件都在这个单一的文件夹中,它完成了任务



如果有人有一个更好的解决方案不依赖于文件路径,我很乐意接受这个解决方案。

我可以通过添加特定于路径的配置来解决这个问题,以清除所有处理程序,并只将静态文件默认值添加到这些路径。这是一个不完美的解决方案,因为它基于文件路径,而不是文件类型,但是因为我所有的JavaScript文件都在这个单一的文件夹中,它完成了任务



如果有人有一个更好的不依赖文件路径的解决方案,我很乐意接受它作为解决方案。

在我的测试中,js文件可以获得自定义缓存控件和etag头。可能是asp.net的压缩和绑定使js文件与其他js文件绑定,导致您无法查看这些头信息。您能告诉我您是如何引用js文件的,并向我显示引用的代码和js文件名吗?所有ASP.NET MVC绑定和缩小功能都已禁用。内部资产在构建时使用Gulp进行处理和缩小,并放入输出目录。使用
语法,以通常的方式分别引用这些输出文件。@JacobStamm您是如何加载javascript文件的。您使用BundleConfig吗?我使用了您的设置,它为js文件正确添加了头。也许您可以使用失败的请求跟踪来查看响应头在css和js文件之间的编写是否不同?我不想这么说,但我不再遇到这个问题,也不知道为什么。我尝试了发布的每一个想法,但最终我将它们全部删除,并且在我的web.config中不再有任何对.js文件有任何不同处理的内容。我从原始问题中删除了处理程序,剩下的唯一一位是初始
clientCache
设置。现在,它正在处理.js文件,就像它应该处理的其他文件类型一样,就好像这个问题从未存在过一样。希望我能有一个更好的答案来解释为什么,但是,嘿,它现在“刚刚工作”。在我的测试中,js文件可以获得自定义缓存控件和etag头。可能是asp.net的压缩和绑定使js文件与其他js文件绑定,导致您无法查看这些头信息。您能告诉我您是如何引用js文件的,并向我显示引用的代码和js文件名吗?所有ASP.NET MVC绑定和缩小功能都已禁用。内部资产在构建时使用Gulp进行处理和缩小,并放入输出目录。使用
语法,以通常的方式分别引用这些输出文件。@JacobStamm您是如何加载javascript文件的。您使用BundleConfig吗?我使用了您的设置,它为js文件正确添加了头。也许您可以使用失败的请求跟踪来查看响应头在css和js文件之间的编写是否不同?我不想这么说,但我不再遇到这个问题,也不知道为什么。我尝试了发布的每一个想法,但最终我将它们全部删除,并且在我的web.config中不再有任何对.js文件有任何不同处理的内容。我从原始问题中删除了处理程序,剩下的唯一一位是初始
clientCache
设置。现在,它正在处理.js文件,就像它应该处理的其他文件类型一样,就好像这个问题从未存在过一样。希望我能有一个更好的答案来解释为什么,但是,嘿,它现在“刚刚起作用”。@JacobStamm你能看到这种使用mimeMap的方法是否对你有效吗?不幸的是,我不再能够重现这个问题,所以我不能肯定这是否有效。我会注意到这种方法的缺点是,我必须找出我的项目需要能够提供的每种类型的静态文件扩展名,并将其添加到此列表中,这可能会成为一个非常大的列表。@JacobStamm您能看到这种使用mimeMap的方法是否适用于您吗?不幸的是,我不再能够重现这个问题,所以我不能肯定这是否有效。我会注意到,这种方法的缺点是,我必须找出我的项目需要能够提供的每种类型的静态文件扩展名,并将其添加到此列表中,这可能最终会成为一个非常大的列表。