加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读