2011-11-21 57 views
1

我想覆盖Url.Content追加一个查询字符串参数到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签入自动更改版本号或编译这些文件,这也会非常有用。

回答

4

你可以做这样的事情:

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

+0

乍一看卡带看起来非常有用,我一定会考虑更多 –