【问题标题】:razor extension method for url.content to prevent caching用于防止缓存的 url.content 的 razor 扩展方法
【发布时间】: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 签入或编译自动更改版本号,那也将非常有用。

【问题讨论】:

    标签: c# javascript css asp.net-mvc razor


    【解决方案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

    【讨论】:

    • 乍一看盒式磁带看起来很有用,我一定会进一步研究
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多