用于防止缓存的 url.content 的 razor 扩展方法

Posted

技术标签:

【中文标题】用于防止缓存的 url.content 的 razor 扩展方法【英文标题】:razor extension method for url.content to prevent caching 【发布时间】:2012-01-03 06:15:22 【问题描述】:

我想覆盖 Url.Content 以将查询字符串参数附加到 Url.Content 上的结果字符串。

原因是,我开发了一个 Web 应用程序,并且在每个版本中,用户都必须清除他们的缓存以获取新的 css 和 js。对此的解决方案是在查询字符串中附加一个版本号以强制加载新版本。

一个可行的解决方案如下:

@ var version = "?v=" + ViewBag.VersionNumber; 
<head>
<link href="@Url.Content("~/ux/css/base.css")@version" rel="stylesheet" type="text/css" />
</head>

版本在配置文件中设置,因此每个版本都会更新版本。不过,我希望这更加自动化,因为目前任何时候添加新的 css 引用,我们都必须记住将 @version 添加到字符串中。返回带有已附加版本号的路径的扩展方法将是完美的。

另外,如果有人知道我可以通过 TFS 签入或编译自动更改版本号,那也将非常有用。

【问题讨论】:

【参考方案1】:

你可以这样做:

public static string VersionedContent(this UrlHelper urlHelper, string contentPath)

    string result = urlHelper.Content(contentPath);
    var versionService = Engine.IocService.GetInstance<IVersionService>();
    string tag = versionService.GetVersionTag();
    if (result.Contains('?'))
    
        result += "&v="+tag;
    
    else
    
        result += "?v="+tag;
    
    return result;

版本服务可能如下所示:

public class VersionService : IVersionService

    string _versionTag;
    public VersionService()
    
        _versionTag = Assembly.GetExecutingAssembly().GetName().Version.ToString();
        _versionTag = _versionTag.Replace('.', '-');
    
    #region IVersionedContentService Members

    public string GetVersionTag()
    
        return _versionTag;
    

    #endregion

你可能想看看cassette

* 编辑 * 对于汽车。使用 TFS 构建编号,请查看: automatic-assembly-file-version-numbering-in-tfs-2010

【讨论】:

乍一看盒式磁带看起来很有用,我一定会进一步研究

以上是关于用于防止缓存的 url.content 的 razor 扩展方法的主要内容,如果未能解决你的问题,请参考以下文章

python 斐波那契(razónaurea)。

防止图像文件被添加到浏览器缓存

防止在 ASP.NET MVC 中缓存 WEB API 数据

如何计算列表中每个单词的计数? [复制]

JS基础 Symbol 用于防止属性名冲突

用双指针实现PLC堆栈设计