using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Configuration; using System.Text; using System.IO; namespace KangMore.Web { public static class HtmlStaticTools { /// <summary> /// 输出静态页面 /// </summary> /// <param name="htmlStaticEnum">静态化类型</param> /// <param name="listConvertContent">标签以及转化内容列表</param> /// <returns>返回新生成的静态页面URI</returns> public static string OutputHtml(HtmlStaticEnum htmlStaticEnum, List<ConvertContent> listConvertContent, String htmlName) { //绝对路径 string filePath = ""; //相对Web容器路径 string fileUri = ""; //初始化名称 htmlName += ".html"; string staticTemplatePath = ""; string webPath = HttpContext.Current.Server.MapPath(@"..\"); string filePathKey = "HtmlStatic_" + htmlStaticEnum.ToString(); string staticTemplateKey = "StaticTemplate_" + htmlStaticEnum.ToString(); //暂时不含日期 fileUri = String.Format(@"{0}" , ConfigurationManager.AppSettings[filePathKey].ToString() //, DateTime.Now.ToShortDateString() ); filePath = String.Format(@"{0}{1}" , webPath , fileUri ); staticTemplatePath = String.Format(@"{0}{1}" , webPath , ConfigurationManager.AppSettings[staticTemplateKey].ToString()); StringBuilder sbTemplateContent = new StringBuilder(); StreamReader sr = new StreamReader(staticTemplatePath);//建立文件读取流 String strTempLine; while ((strTempLine = sr.ReadLine()) != null) { sbTemplateContent.Append(strTempLine); } sr.Close();//关闭文件读取流 foreach (var item in listConvertContent) { sbTemplateContent.Replace(item.Tag, item.Content); } if (!Directory.Exists(filePath)) { Directory.CreateDirectory(filePath); } fileUri = fileUri + @"\" + htmlName; filePath = filePath + @"\" + htmlName; StreamWriter sw = new StreamWriter(filePath, false, Encoding.Unicode); sw.Write(sbTemplateContent.ToString()); sw.Close(); return @"..\" + fileUri; } /// <summary> /// 查找是否已经存在静态化文件 /// </summary> /// <param name="filePath">文件绝对路径</param> /// <param name="htmlName">文件名</param> /// <returns>是否存在</returns> private static bool GetHtmlUri(string filePath, String htmlName) { if (!File.Exists(filePath+@"\"+htmlName)) { return false; } return true; } /// <summary> /// 校验HTML文件是否存在 /// </summary> /// <param name="htmlStaticEnum">静态化类型</param> /// <param name="htmlName">文件名称</param> /// <returns>若没找到则返回String.Empty 找到则返回相对Web容器的路径</returns> public static string CheckHadHtml(HtmlStaticEnum htmlStaticEnum, string htmlName) { //绝对路径 string filePath = ""; //相对Web容器路径 string fileUri = ""; //初始化名称 htmlName += ".html"; string webPath = HttpContext.Current.Server.MapPath(@"..\"); string filePathKey = "HtmlStatic_" + htmlStaticEnum.ToString(); string staticTemplateKey = "StaticTemplate_" + htmlStaticEnum.ToString(); //暂时不含日期 fileUri = String.Format(@"{0}" , ConfigurationManager.AppSettings[filePathKey].ToString() //, DateTime.Now.ToShortDateString() ); filePath = String.Format(@"{0}{1}" , webPath , fileUri ); if (GetHtmlUri(filePath, htmlName)) { return @"..\"+fileUri + @"\" + htmlName; } return ""; } } }
静态页模版
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta name="robots" content="all" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>静态页模版</title> </head> <body > <span>{name}</span> <span>{title}</span> </body></html>方法调用:
string uri = HtmlStaticTools.CheckHadHtml(HtmlStaticEnum.Disease, diseaseExtendID.ToString()); if (string.IsNullOrEmpty(uri)) { List<ConvertContent> list = new List<ConvertContent>(); list.Add(new ConvertContent("{name}", "xxxx")); list.Add(new ConvertContent("{title}", "页面静态化")); Response.Redirect(HtmlStaticTools.OutputHtml(HtmlStaticEnum.Disease, list, diseaseExtendID.ToString())); }else { Response.Redirect(uri); }
XML
<!--静态化地址--> <add key="HtmlStatic_News" value="NewsHtmls"/> <add key="HtmlStatic_Hospital" value="HospitalHtmls"/> <add key="HtmlStatic_Disease" value="DiseaseHtmls"/> <!--静态化模板--> <add key="StaticTemplate_News" value="Template\News.htm"/> <add key="StaticTemplate_Hospital" value="Template\Hospital.htm"/> <add key="StaticTemplate_Disease" value="Template\Disease.htm"/>
枚举..
/// <summary> /// 静态化网页枚举 /// </summary> public enum HtmlStaticEnum { News, Hospital, Disease }
Copyright @ 2024 刘剑_1989 Powered by .NET 9.0 on Kubernetes Powered by: .Text and ASP.NET Theme by: .NET Monster