【发布时间】:2017-11-21 10:51:39
【问题描述】:
背景
我有一个应用程序,其中 3 个视图利用 html5 离线应用程序功能。因此,我在剃刀视图中生成了一个应用程序清单。此视图的简化版本可能如下所示:
CACHE MANIFEST
CACHE:
/site.min.css
/site.min.js
为了使离线应用正常运行,缓存文件必须与应用内离线页面请求的文件完全匹配。但是,我想将“缓存清除”版本字符串应用于此清单中引用的 js/css 资源。对于 HTML 标记,ScriptTagHelper 支持此功能,但我没有找到任何支持纯 URL 的帮助程序/扩展方法(如上述清单中所要求的)。
参考this post,我通过将FileVersionProvider 注入我的清单视图并使用AddFileVersionToPath() 方法解决了这个问题,如下所示:
@inject FileVersionProvider versionProvider
CACHE MANIFEST
CACHE:
@versionProvider.AddFileVersionToPath("/site.min.css")
@versionProvider.AddFileVersionToPath("/site.min.js")
但是,FileVersionProvider 类位于 Microsoft.AspNetCore.Mvc.TagHelpers.Internal 命名空间中,从维护的角度来看,这并不能让我充满信心。
最后,我为此执行的 DI 设置并不完全理想(见下文)。我不喜欢我需要拨打GetService() 的事实,当然我应该指定一个特定的MemoryCache?
services.AddSingleton<FileVersionProvider>(s =>
new FileVersionProvider(
s.GetService<IHostingEnvironment>()?.WebRootFileProvider,
s.GetService<IMemoryCache>(),
new PathString("") ));
问题
以前有没有人要求使用版本字符串创建指向 js/css 资源的链接?如果是这样,有没有更优雅的解决方案?
【问题讨论】:
标签: c# asp.net-core asp.net-core-mvc asp.net-core-2.0 offline-caching