Pat*_*ott 2 javascript css c# asp.net-mvc razor
我想覆盖 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>
Run Code Online (Sandbox Code Playgroud)
版本在配置文件中设置,因此每个版本都会更新版本。不过,我希望这更加自动化,因为目前任何时候添加新的 css 引用时,我们都必须记住将 @version 添加到字符串中。返回带有已附加版本号的路径的扩展方法将是完美的。
此外,如果有人知道我可以通过 TFS 签入或编译自动更改版本号,那也将非常有用。
你可以这样做:
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;
}
Run Code Online (Sandbox Code Playgroud)
版本服务看起来像这样:
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
}
Run Code Online (Sandbox Code Playgroud)
你可能想看看卡带
* 编辑 * 对于自动。使用 TFS 构建编号,请查看: automatic-assembly-file-version-numbering-in-tfs-2010