C# 防止缓存的url.content的razor扩展方法
我想覆盖Url.Content,将查询字符串参数附加到Url.Content上的结果字符串 原因是,我开发了一个web应用程序,每次发布时,用户都必须清除缓存以获得新的css和js。解决方法是在querystring中附加一个版本号,以强制加载新版本 工作解决办法如下:C# 防止缓存的url.content的razor扩展方法,c#,javascript,css,asp.net-mvc,razor,C#,Javascript,Css,Asp.net Mvc,Razor,我想覆盖Url.Content,将查询字符串参数附加到Url.Content上的结果字符串 原因是,我开发了一个web应用程序,每次发布时,用户都必须清除缓存以获得新的css和js。解决方法是在querystring中附加一个版本号,以强制加载新版本 工作解决办法如下: @{ var version = "?v=" + ViewBag.VersionNumber; } <head> <link href="@Url.Content("~/ux/css/base.css")@ve
@{ var version = "?v=" + ViewBag.VersionNumber; }
<head>
<link href="@Url.Content("~/ux/css/base.css")@version" rel="stylesheet" type="text/css" />
</head>
@{var version=“?v=“+ViewBag.VersionNumber;”
版本在配置文件中设置,因此每个版本都会更新版本。我希望这是更自动的,因为当前任何时候添加新的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;
}
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
}
你可能想看看
*编辑*
自动驾驶。使用TFS生成编号,请查看:
乍一看,这盘磁带看起来非常有用,我肯定会进一步研究