加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASP.NET MVC中的CSS/JS文件的自动版本?

发布时间:2020-12-16 00:37:23 所属栏目:asp.Net 来源:网络整理
导读:我已经阅读了许多关于如何自动版本的CSS / JS文件的文章 – 但是没有一个提供了一个优雅的方式来做到这一点在ASP.NET MVC。 这个链接 – What is an elegant way to force browsers to reload cached CSS/JS files? – 为Apache提供了一个解决方案 – 但我有
我已经阅读了许多关于如何自动版本的CSS / JS文件的文章 – 但是没有一个提供了一个优雅的方式来做到这一点在ASP.NET MVC。

这个链接 – What is an elegant way to force browsers to reload cached CSS/JS files? – 为Apache提供了一个解决方案 – 但我有点困惑,这可以通过ASP.NET MVC实现?

任何人都可以提供一些建议,如何在IIS7和ASP.NET MVC上这样做,以便CSS / JS文件自动在URL中插入版本号,而不改变文件的位置?

也就是说,链接出来链接这个等可能使用URL重写或?

<link rel="stylesheet" href="/css/structure.1194900443.css" type="text/css" />
<script type="text/javascript" src="/scripts/prototype.1197993206.js"></script>

谢谢

解决方法

当面对这个问题时,我在UrlHelper的Content方法中写了一系列包装函数:

编辑:

在下面的意见讨论之后,我更新了这段代码:

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}",_version));
    }

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

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

结合以下重写规则使用这些功能应该可以工作:

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

This article讨论如何在IIS7上创建重写规则。

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读