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

asp.net-mvc – 如何在版本信息中包含静态内容

发布时间:2020-12-16 09:23:30 所属栏目:asp.Net 来源:网络整理
导读:我的静态内容缓存在客户端上有问题(静态我的意思是js,css,jpeg,gif等). (并且客户端我的意思是我的开发机器大部分时间). 因此,页面要么抛出脚本错误,要么无法正确显示.我不是Rails开发人员,但我及时读了几本关于它的书.我记得很清楚的一点是,它会在包含文件
我的静态内容缓存在客户端上有问题(静态我的意思是js,css,jpeg,gif等). (并且客户端我的意思是我的开发机器大部分时间).

因此,页面要么抛出脚本错误,要么无法正确显示.我不是Rails开发人员,但我及时读了几本关于它的书.我记得很清楚的一点是,它会在包含文件的末尾添加一些魔术版本号,因此它就变成了

<script src="~/Scripts/Invoice.js?201112091712" type="text/javascript"></script>

如果您修改该内容文件,它会生成一个新的版本号,因此它会生成一个不同的include语句,因此,客户端认为它是一个新内容,并且在不检查其缓存的情况下加载它.

asp.net-mvc 3& IIS 7支持这个,或者你知道任何模仿这种行为的工具吗?

谢谢,Haz?m

解决方法

我已经在我的一个项目中完成了这项工作,如果您喜欢,请随时使用我的助手:

public static class VersionedContentExtensions
{
    public static MvcHtmlString VersionedScript(this HtmlHelper html,string file)
    {
        return VersionedContent(html,"<script src="{0}" type="text/javascript"></script>",file);                     
    }

    public static MvcHtmlString VersionedStyle(this HtmlHelper html,"<link href="{0}" rel="stylesheet" type="text/css">",file);
    }

    private static MvcHtmlString VersionedContent(this HtmlHelper html,string template,string file)
    {
        string hash = HttpContext.Current.Application["VersionedContentHash_" + file] as string;
        if (hash == null)
        {
            string filename = HttpContext.Current.Server.MapPath(file);
            hash = GetMD5HashFromFile(filename);
            HttpContext.Current.Application["VersionedContentHash_" + file] = hash;
        }

        return MvcHtmlString.Create(string.Format(template,file + "?v=" + hash));
    }

    private static string GetMD5HashFromFile(string fileName)
    {
        FileStream file = new FileStream(fileName,FileMode.Open);
        MD5 md5 = new MD5CryptoServiceProvider();
        byte[] retVal = md5.ComputeHash(file);
        file.Close();

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < retVal.Length; i++)
        {
            sb.Append(retVal[i].ToString("x2"));
        }
        return sb.ToString();
    }
}

像这样使用它们:

@Html.VersionedScript("/Scripts/sccat.core.js")

(编辑:李大同)

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

    推荐文章
      热点阅读