首页 > 编程语言 >Asp.Net Framework项目优化前端文件引用

Asp.Net Framework项目优化前端文件引用

时间:2023-03-31 14:33:36浏览次数:45  
标签:src Asp item href Framework html ToString var Net

背景:公司一个老项目,前端引用都是直接引用文件,这样导致每次发布都存在用户浏览器缓存问题,常见做法是找到每个引用前端文件处加?version,但是太麻烦了

解决思路:

1.找到所有前端文件
2.jenkins每次编译更新版本号,把新的版本号拼接到前端文件引用处

实现:

  • 1.首先在扩展类里面扩展以下方法,用来动态处理版本变更的拼接
/// <summary>
/// 处理js
/// </summary>
/// <param name="html"></param>
/// <param name="contentPath"></param>
/// <returns></returns>
public static MvcHtmlString Script(this HtmlHelper html, string contentPath)
{
    return VersionContent(html, "<script src=\"{0}\" type=\"text/javascript\"></script>", contentPath);
}

/// <summary>
/// 处理css
/// </summary>
/// <param name="html"></param>
/// <param name="contentPath"></param>
/// <returns></returns>
public static MvcHtmlString Style(this HtmlHelper html, string contentPath)
{
    return VersionContent(html, "<link href=\"{0}\" rel=\"stylesheet\" type=\"text/css\">", contentPath);
}

/// <summary>
/// 加上版本
/// </summary>
/// <param name="html"></param>
/// <param name="template"></param>
/// <param name="contentPath"></param>
private static MvcHtmlString VersionContent(this HtmlHelper html, string template, string contentPath)
{

    string v = "";
    try
    {
        var versionPath = ConfigHelper.GetConfigString("VersionPath");
        var version = FileUtility.GetContent(versionPath);
        var httpContenxt = html.ViewContext.HttpContext;
        contentPath = UrlHelper.GenerateContentUrl(contentPath, httpContenxt) + "?v=" + version;
        v = string.Format(template, contentPath);
    }
    catch (Exception ex)
    {
        ExceptionlessManager.WriteExceptionLog("HtmlHelperExtension", $"初始化版本号异常:{ex}", null, AllProjectsKey.ProductError.ToString());
    }
    return MvcHtmlString.Create(v);
}
  • 2.一次性替换所有静态文件的引用方式

引用Less组件,参考文档:Less.Html

static void Main(string[] args)
{
  //静态文件包地址,比如MVC项目中Views文件夹
  var InitStaticResourcesPath = ConfigurationManager.AppSettings["InitStaticResourcesPath"];
  if (!string.IsNullOrEmpty(InitStaticResourcesPath))
  {
      System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(InitStaticResourcesPath);
      var files = dir.GetFiles(".", System.IO.SearchOption.AllDirectories);
      var aspxs = files.ToList().Where(w => w.FullName.Contains("aspx"));
      var cshtmls = files.ToList().Where(w => w.FullName.Contains("cshtml"));
      foreach (var aspx in aspxs)
      {
          var html = FileUtility.GetContent(aspx.FullName);
          Document document = HtmlParser.Parse(html);
          var q = Selector.Bind(document);
          q("html").before("<%@ Import Namespace=\"PDSys.Domain.Models.Extentions\" %>");
          q("html").before("\r\n");
          var heads = q("head");
          var links = q("link");
          var scripts = q("script");
          foreach (var item in links)
          {
              var href = item.attributes.Where(w => w.name == "href").FirstOrDefault();
              if (href != null)
              {
                  var start = href.ToString().IndexOf("\"");
                  var end = href.ToString().IndexOf(".css");
                  if (end > 0)
                  {
                      var content = href.ToString().Substring(start, end);
                      q(item).before($"<%=Html.Style({content}) %>");
                      q(item).remove();
                  }
              }
          }
          foreach (var item in scripts)
          {
              var src = item.attributes.Where(w => w.name == "src").FirstOrDefault();
              if (src != null)
              {
                  var start = src.ToString().IndexOf("\"");
                  var end = src.ToString().IndexOf(".js");
                  if (end > 0)
                  {
                      var content = src.ToString().Substring(start, end);
                      q(item).before($"<%=Html.Script({content}) %>");
                      q(item).remove();
                  }
              }
          }
          html = document.ToString();
          FileUtility.SetContent(aspx.FullName, html);
          Console.WriteLine($"{aspx.FullName}处理完成");
      }
      foreach (var cshtml in cshtmls)
      {
          var html = FileUtility.GetContent(cshtml.FullName);
          Document document = HtmlParser.Parse(html);
          var q = Selector.Bind(document);
          q("html").before("@using PDSys.Domain.Models.Extentions");
          q("html").before("\r\n");
          var heads = q("head");
          var links = q("link");
          var scripts = q("script");
          foreach (var item in links)
          {
              var href = item.attributes.Where(w => w.name == "href").FirstOrDefault();
              if (href != null)
              {
                  var start = href.ToString().IndexOf("\"");
                  var end = href.ToString().IndexOf(".css");
                  if (end > 0)
                  {
                      var content = href.ToString().Substring(start, end);
                      q(item).before($"@Html.Style({content})");
                      q(item).remove();
                  }
              }
          }
          foreach (var item in scripts)
          {
              var src = item.attributes.Where(w => w.name == "src").FirstOrDefault();
              if (src != null)
              {
                  var start = src.ToString().IndexOf("\"");
                  var end = src.ToString().IndexOf(".js");
                  if (end > 0)
                  {
                      var content = src.ToString().Substring(start, end);
                      q(item).before($"@Html.Script({content})");
                      q(item).remove();
                  }
              }
          }
          html = document.ToString();
          FileUtility.SetContent(cshtml.FullName, html);
          Console.WriteLine($"{cshtml.FullName}处理完成");
      }
      Console.WriteLine("InitStaticResourcesPath全部处理完成");
      Console.ReadKey();
      return;
  }
}

标签:src,Asp,item,href,Framework,html,ToString,var,Net
From: https://www.cnblogs.com/BOSET/p/17276177.html

相关文章

  • Project 'org.springframework.boot:spring-boot-starter-parent:XXX' not found
    问题:Project'org.springframework.boot:spring-boot-starter-parent:XXX'notfound当spring-boot-starter-parent下面的版本报红时并不是这个版本不存在,而是因为idea会默认缓存Maven本地仓库已存在的中的依赖项。只是我们引入的的父依赖版本在本地仓库中不存在,所以就报......
  • Asp.Net Core 动态生成WebApi
    在WebApi架构体系中,一般需要先编写应用服务实现,再通过编写Controller来实现应用服务的Web接口。Controller中的代码作用仅仅是调用Service的方法,将Service提升为Web接口,其实完全可以通过动态生成WebApi来减少编码工作。在.Net示例项目ABP中已经实现了动态生成WebApi的功能,Panda.Dy......
  • 安装罗克韦尔软件,总是提示:未安装microsoft FRAMEWORK 3.5 要如何解决
    1、点击setup文件,总提示如下弹窗  2、先关闭弹窗3、打开电脑控制面板4、找到程序与功能5、点击启用或关闭windows功能 6、   7、电脑开始自动安装FRAMEWORK3.5(前提是电脑必须连接互联网) 8、FRAMEWORK3.5安装完成,提示windows已完成请求的更改   9......
  • Elasticsearch.Net+Nest基本用法
    基本用法安装Nest(安装后默认会装上Elasticsearch.Net),注意:版本尽量选择跟ES版本一致的批量初始化数据到ESusingNest;try{//测试环境配置SSL证书需要的设置ServicePointManager.SecurityProtocol=SecurityProtocolType.Tls12|SecurityProtocolType.Tls11......
  • 新Apple TV支持Netflix直接注册、iTunes账户付费
    今天凌晨,苹果发布了新款机顶盒AppleTV。升级后的AppleTV允许用户直接从该设备上注册Netflix,使用iTunes账户支付该流服务订阅费用。据路透社昨天报道,Hastings最近在寻求与付费电视运营商合作,希望能捆绑其服务,通过有线电视运营商的机顶盒提供电影电视节目。据知情人士透露,对Netfl......
  • 界面组件Telerik ASP.NET MVC使用指南 - 如何自定义网格过滤(一)
    TelerikUIforASP.NETMVC拥有使用JavaScript和HTML5构建网站和移动应用所需的70+UI部件,来满足开发者的各种需求,提供无语伦比的开发性能和用户体验。它主要是针对专业级的ASP.NET开发,通过该产品的强大功能,开发者可以开发出功能丰富、适应标准广泛的响应式应用程序。对于任何......
  • use macOS terminal can not install MicroPython on Raspberry Pi Pico bug All In O
    usemacOSterminalcannotinstallMicroPythononRaspberryPiPicobugAllInOne使用macOS终端无法在RaspberryPiPico上安装MicroPythonbugMicroPython环境搭建您可以通过USB将Pico连接到计算机,然后将文件拖放到它上面来对Pico进行编程,因此我们整理了......
  • broadcom Ethernet BCM57412 驱动更新记录(dkms方式)
    一背景现场DellR740xd2机器使用网卡Broadcom5741210GbSFP+,固件版本22.21.06.80。bnxt_en.ko内核模块是该网卡的驱动,我们默认的驱动版本为1.8.0,而固件版本22.21.06.80需要1.10.2的driver。本文主要是记录一些操作步骤,后续出现类似驱动过旧的问题可以快速解决。二临时解......
  • AspectJ使用
    给下面这个方法增强功能importorg.springframework.stereotype.Component;/***@Classname:AopTest*@Description:*@Author:Stonffe*@Date:2023/3/3020:19*/@ComponentpublicclassAopTest{publicvoidfunc(){System.out.println("functi......
  • THM-Skynet(天网)
    侦查对靶机进行端口扫描开放有445\文件共享服务,使用nmap枚举该服务共享的文件夹nmap--script=smb-enum-users,smb-enum-shares-p44510.10.46.75枚举出两个重要的目录anonymous、milesdyson也可以使用smbclient-L//10.10.46.75该命令进行枚举访问anonymous任何人都......