ASP.NET MVC中的CSS/JS文件自动版本控制?

Tom*_*Tom 19 asp.net-mvc url-rewriting url-routing

我已经阅读了很多关于如何自动编辑CSS/JS文件的文章 - 但是这些都没有提供在ASP.NET MVC中执行此操作的优雅方法.

此链接 - 如何强制浏览器重新加载缓存的CSS/JS文件? - 为Apache提供解决方案 - 但我有点困惑如何通过ASP.NET MVC实现这一点?

是否有人能够提供一些如何在IIS7和ASP.NET MVC上执行此操作的建议 - 以便CSS/JS文件自动在URL中插入版本号而不更改文件的位置?

也就是说,所以链接出来链接这个等大概是使用URL Rewrite或?

<link rel="stylesheet" href="/css/structure.1194900443.css" type="text/css" />
<script type="text/javascript" src="/scripts/prototype.1197993206.js"></script>
Run Code Online (Sandbox Code Playgroud)

谢谢

Nat*_*son 15

当面对这个问题,我写了一系列的围绕着包装功能UrlHelperContent方法:

编辑:

根据以下评论中的讨论,我更新了以下代码:

public static class UrlHelperExtensions
{
    private readonly static string _version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();

    private static string GetAssetsRoot()
    {
        string root = ConfigurationManager.AppSettings["AssetsRoot"];
        return root.IsNullOrEmpty() ? "~" : root;
    }

    public static string Image(this UrlHelper helper, string fileName)
    {
        return helper.Content(string.Format("{0}/v{2}/assets/img/{1}", GetAssetsRoot(), fileName, _version));
    }

    public static string Asset(this UrlHelper helper, string fileName)
    {
        return helper.Content(string.Format("{0}/v{2}/assets/{1}", GetAssetsRoot(), fileName, _version));
    }

    public static string Stylesheet(this UrlHelper helper, string fileName)
    {
        return helper.Content(string.Format("{0}/v{2}/assets/css/{1}", GetAssetsRoot(), fileName, _version));
    }

    public static string Script(this UrlHelper helper, string fileName)
    {
        return helper.Content(string.Format("{0}/v{2}/assets/js/{1}", GetAssetsRoot(), fileName, _version));
    }
}
Run Code Online (Sandbox Code Playgroud)

将这些功能与以下rewrite规则结合使用应该有效:

<rewrite>
  <rules>
    <rule name="Rewrite assets">
      <match url="^v(.*?)/assets/(.*?)" />
      <action type="Rewrite" url="/assets/{R:2}" />
    </rule>
  </rules>
</rewrite>
Run Code Online (Sandbox Code Playgroud)

本文讨论如何在IIS7上创建重写规则.

此代码使用当前程序集的版本号作为它发出的文件路径上的查询字符串参数.当我对站点进行更新并且内部版本号递增时,文件上的querystring参数也会递增,因此用户代理将重新下载该文件.