ASP.NET5 Razor Pages中ES6 Module实现等效asp-append-version版本控制的方法
实现方案
你需要的效果可以通过ASP.NET Core内置的IFileVersionProvider服务实现,它和asp-append-version属性底层使用同一套版本哈希生成逻辑,效果完全等效。
方式1:直接注入服务使用(无需额外编码)
- 先在Razor页面顶部(或全局
_ViewImports.cshtml)注入服务:
@inject IFileVersionProvider FileVersionProvider
- 在module的import语句中直接调用即可:
<script type="module"> import * as mynamespace from '@FileVersionProvider.AddFileVersionToPath(Request.PathBase, "/lib/myscript.js")'; // 其余业务代码 </script>
调用后会自动生成类似/lib/myscript.js?v=abc123xyz...的带版本哈希路径,和asp-append-version="true"的生成规则完全一致。
方式2:封装为HtmlHelper扩展(符合你预期的调用写法)
如果你想实现示例中@HTML.GetAspAppendVersionValue()的调用形式,可以自己添加一个简单的扩展方法:
- 新建扩展类:
using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.Extensions.DependencyInjection; public static class HtmlHelperFileVersionExtensions { public static string GetAspAppendVersionValue(this IHtmlHelper html, string filePath) { var fileVersionProvider = html.ViewContext.HttpContext.RequestServices .GetRequiredService<IFileVersionProvider>(); return fileVersionProvider.AddFileVersionToPath( html.ViewContext.HttpContext.Request.PathBase, filePath ); } }
- 在Razor中直接调用:
<script type="module"> import * as mynamespace from '@Html.GetAspAppendVersionValue("/lib/myscript.js")'; // 其余业务代码 </script>
不需要手动拼接?version=参数,方法返回值已经自带生成好的版本查询串。
注意:传入的文件路径必须是网站静态资源目录下的真实文件路径,服务需要读取文件内容生成哈希值,不存在的文件不会追加版本参数。
内容的提问来源于stack exchange,提问作者Daniele Licitra
相关产品推荐
相关产品推荐

