c# – java脚本版本(asp-append-version)如何在ASP.NET Core MVC中工作

前端之家收集整理的这篇文章主要介绍了c# – java脚本版本(asp-append-version)如何在ASP.NET Core MVC中工作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
似乎在新的MVC( link)中没有支持动态捆绑,它应该使用gulp任务完成. MVC支持一些名为asp-append-version的新属性,但是我没有发现任何关于它的工作原理的解释.我怀疑它是计算文件内容的一些哈希,甚至在文件更改后更新它.有没有关于工作原理的文件

我也想知道如何检测文件更改,或者每次MVC解析剃刀标记时是否重新计算哈希.

解决方法

@H_404_7@ 您可以查看 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

猜你在找的.NET Core相关文章