Ejemplo n.º 1
0
        /// <summary>
        /// 递归实现页面静态化功能
        /// </summary>
        /// <param name="urlString">要访问的页面链接地址</param>
        public void SaveHtmlCode(string urlString)
        {
            if (htmlCreatedList.Contains(urlString))
            {
                return;
            }
            string htmlCode      = GetHtmlCodeFromUrl(urlString);
            string htmlPath      = GetHtmlPathFromUrl(urlString);
            string direcHtmlPath = Path.GetDirectoryName(htmlPath);

            if (!Directory.Exists(direcHtmlPath))
            {
                Directory.CreateDirectory(direcHtmlPath);
            }
            File.WriteAllText(htmlPath, htmlCode);
            htmlCreatedList.Add(urlString);

            ArrayList urlList = GetUrlLinkFromHtmlCode(htmlCode);
            string    urlTemp = string.Empty;

            foreach (string url in urlList)
            {
                Uri uri = new Uri(urlString);
                urlTemp = url;
                urlTemp = Regex.Replace(urlTemp, "href\\s*=\\s*", "");
                urlTemp = urlTemp.Replace("\"", "");
                urlTemp = urlTemp.Replace("\\", "/");
                urlTemp = HtmlPageHelper.GetUrlRoot(HttpContext.Current.Request.Url) + urlTemp;
                SaveHtmlCode(urlTemp);
            }
        }
Ejemplo n.º 2
0
 public override void Write(byte[] buffer, int offset, int count)
 {
     if (!context.Response.StatusCode.Equals(200))
     {
         return;
     }
     inner.Write(buffer, offset, count);
     //if (!context.HttpContext.Request.FilePath.ToLower().StartsWith("/admin"))
     //当前请求不是后台管理;并且返回客户端是html才生成静态页面
     if (!context.Request.FilePath.ToLower().StartsWith("/admin") && context.Response.ContentType.Equals("text/html"))
     {
         //静态页面保存路径信息
         string htmlPath      = HtmlPageHelper.GetHtmlPathFromUrl(context.Request.Url.AbsoluteUri);
         string direcHtmlPath = Path.GetDirectoryName(htmlPath);
         if (!Directory.Exists(direcHtmlPath))
         {
             Directory.CreateDirectory(direcHtmlPath);
         }
         //获取返回客户端的html代码,并进行压缩处理
         string htmlCode  = System.Text.Encoding.UTF8.GetString(buffer);
         string isZipHtml = System.Configuration.ConfigurationManager.AppSettings["IsCompressed"];
         //如果“IsCompressed”的值为空或0,则表示不压缩
         if (!string.IsNullOrEmpty(isZipHtml) && !isZipHtml.Equals(0))
         {
             htmlCode = Regex.Replace(htmlCode, "^\\s*", string.Empty, RegexOptions.Compiled | RegexOptions.Multiline);
             htmlCode = Regex.Replace(htmlCode, "\\r\\n", string.Empty, RegexOptions.Compiled | RegexOptions.Multiline);
             htmlCode = Regex.Replace(htmlCode, "<!--*.*?-->", string.Empty, RegexOptions.Compiled | RegexOptions.Multiline);
         }
         //保存文件,这里不能用File.WriteAllText
         File.AppendAllText(htmlPath, htmlCode);
     }
 }
Ejemplo n.º 3
0
        private void Application_BeginRequest(Object source, EventArgs e)
        {
            HttpApplication application   = (HttpApplication)source;
            HttpContext     context       = application.Context;
            string          filePath      = context.Request.FilePath;
            string          fileExtension = VirtualPathUtility.GetExtension(filePath);
            bool            isFile        = !string.IsNullOrEmpty(fileExtension);

            //如果当前请求的不是资源文件、不是后台管理、请求中没有表单信息、静态页面存在,则返回静态页面
            if ((!isFile || fileExtension == ".zeje") && !filePath.ToLower().StartsWith("/admin") && context.Request.Form.Count.Equals(0))
            {
                string htmlPath = HtmlPageHelper.GetHtmlPathFromUrl(context.Request.Url.AbsoluteUri);
                if (File.Exists(htmlPath))
                {
                    context.Response.WriteFile(htmlPath);
                    context.Response.End();
                }
                else
                {
                    context.Response.Filter = new HttpResponseFilterWrapper(context.Response.Filter, context);
                }
            }
        }