我想覆盖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签到或编译自动更改版本号,这也非常有用。
答案 0 :(得分: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
*编辑* 对于autom。使用TFS构建号码,请查看: automatic-assembly-file-version-numbering-in-tfs-2010