2011-11-21 61 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

乍一看卡帶看起來非常有用,我一定會考慮更多 –