c# – java脚本版本(asp-append-version)如何在ASP.NET Core MVC
发布时间:2020-12-15 06:33:06 所属栏目:百科 来源:网络整理
导读:似乎在新的MVC( link)中没有支持动态捆绑,它应该使用gulp任务完成. MVC支持一些名为asp-append-version的新属性,但是我没有发现任何关于它的工作原理的解释.我怀疑它是计算文件内容的一些哈希,甚至在文件更改后更新它.有没有关于工作原理的文件? 我也想知道
似乎在新的MVC(
link)中没有支持动态捆绑,它应该使用gulp任务完成. MVC支持一些名为asp-append-version的新属性,但是我没有发现任何关于它的工作原理的解释.我怀疑它是计算文件内容的一些哈希,甚至在文件更改后更新它.有没有关于工作原理的文件?
我也想知道如何检测文件更改,或者每次MVC解析剃刀标记时是否重新计算哈希. 解决方法
您可以查看
LinkTagHelper 源代码,您将看到它基本上是通过
FileVersionProvider 添加一个版本查询字符串到href值:
if (AppendVersion == true) { EnsureFileVersionProvider(); if (Href != null) { output.Attributes[HrefAttributeName].Value = _fileVersionProvider.AddFileVersionToPath(Href); } } private void EnsureFileVersionProvider() { if (_fileVersionProvider == null) { _fileVersionProvider = new FileVersionProvider( HostingEnvironment.WebRootFileProvider,Cache,ViewContext.HttpContext.Request.PathBase); } } FileVersionProvider将使用SHA256算法计算文件内容的哈希值.然后它会将其编码并将其添加到查询字符串中,如: path/to/file?v=B95ZXzHiOuQJzhBoHlSlNyN1_cOjJnz2DFsr-3ZyyJs 仅当文件更改时,才会重新计算哈希值,因为它将添加到缓存中,而是基于文件观察器的到期触发器: if (!_cache.TryGetValue(path,out value)) { value = QueryHelpers.AddQueryString(path,VersionKey,GetHashForFile(fileInfo)); var cacheEntryOptions = new MemoryCacheEntryOptions().AddExpirationToken(_fileProvider.Watch(resolvedPath)); _cache.Set(path,value,cacheEntryOptions); } 这个观察者由HostingEnvironment.WebRootFileProvider提供,它实现IFileProvider: // // Summary: // Creates a change trigger with the specified filter. // // Parameters: // filter: // Filter string used to determine what files or folders to monitor. Example: **/*.cs,// *.*,subFolder/**/*.cshtml. // // Returns: // An Microsoft.Framework.Caching.IExpirationTrigger that is triggered when a file // matching filter is added,modified or deleted. IExpirationTrigger Watch(string filter); 注意:您可以通过检查IMemoryCache中的值来自己查看缓存的值: //give the link: <link rel="stylesheet" asp-append-version="true" href="~/css/site.css" /> //You can check the cached version this.Context.RequestServices.GetRequiredService<IMemoryCache>().Get("/css/site.css") //Which will show a value like: /css/site.css?v=B95ZXzHiOuQJzhBoHlSlNyN1_cOjJnz2DFsr-3ZyyJs (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |