ASP.NET使用HttpHandler进行页面静态化(自动生成页面)
这次的Demo是,一个根页面,点击链接创建子页面,子页面都是一个Template页面进行替换的

一个根页面
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="List.aspx.cs" Inherits="Static.List" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h2>体育新闻</h2>
<p><a href="News/Info_0.html">中国拳手</a></p>
<p><a href="News/Info_1.html">纳斯很少情绪激动</a></p>
</div>
</form>
</body>
</html>
新建一个类,做假数据用,代替数据库的表
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Static
{
public class News
{
public int Id { get; set; }
public string Title { get; set; }
public string Time { get; set; }
public string Content { get; set; }
}
}
建一个类,使用List进行加载数据
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Static
{
public class NewsManager
{
public List<News> lists = new List<News>();
public NewsManager()
{
lists.Add(new News()
{
Id=1,
Time="1019年1月1日",
Content="拳手的内容",
Title="拳手的标题"
});
lists.Add(new News()
{
Id = 2,
Time = "10年1月1日",
Content = "情绪的内容",
Title = "情绪的标题"
});
}
}
}
新建一个News文件夹,建一个Tamplate的网页,用来规范网页

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<div>
<p>{$Title}</p>
<p>{$Time}</p>
<p>{$Content}</p>
</div>
</body>
</html>
建一个类进行操作,继承IHttpHandlers
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
namespace Static
{
public class FileStaticHandler : IHttpHandler
{
public bool IsReusable => true;
public void ProcessRequest(HttpContext context)
{
string url = context.Request.RawUrl;
//通过Url把id取到
int last = url.LastIndexOf("_");
int dot = url.LastIndexOf(".");
int newId = int.Parse(url.Substring(last + 1, dot - last - 1));
//生成路径
string userFilePath = context.Server.MapPath("~/News/Info_" + newId + ".html");
//如果此路径没文件的话,就生成
if (!File.Exists(userFilePath))
{
//我的加载在类里面写的
NewsManager newsManager = new NewsManager();
List<News> news = newsManager.lists;
//获取某个文件的路径
string tempPath = context.Server.MapPath("~/News/Template.html");
//把此文件里面的关键字替换掉
//把这个文件序列化保存
string tempHtml = ReadTemplate(tempPath);
tempHtml = tempHtml.Replace("{$Title}", news[newId].Title);
tempHtml = tempHtml.Replace("{$Time}", news[newId].Time);
tempHtml = tempHtml.Replace("{$Content}", news[newId].Content);
//输出此文件
WriteHtmlFile(userFilePath, tempHtml);
}
//输出文件
context.Response.WriteFile(userFilePath);
}
private void WriteHtmlFile(string userFilePath, string tempHtml)
{
FileStream fs = new FileStream(userFilePath, FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
sw.Write(tempHtml);
sw.Close();
fs.Close();
}
private string ReadTemplate(string tempPath)
{
if (!File.Exists(tempPath))
{
throw new Exception("新闻详情页面模板文件未找到!");
}
FileStream fs = new FileStream(tempPath, FileMode.Open);
StreamReader sr = new StreamReader(fs);
string tempHtml = sr.ReadToEnd();
sr.Close();
fs.Close();
return tempHtml;
}
}
}
既然用了Handler,就要进行配置文件

<system.webServer>
<handlers>
<add name="test" path="News/*.html" verb="*" type="Static.FileStaticHandler" />
</handlers>
</system.webServer>
根页面效果图(记得显示全部文件,否则会不显示)

点击了第一个链接,就生成了页面

ASP.NET使用HttpHandler进行页面静态化(自动生成页面)的更多相关文章
- ASP.NET关于书籍详情和删除的Demo(HttpHandler进行页面静态化[自动生成html网页]+Entity Framework通过类创建数据库+EF删查)
这次的Demo如标题所示, 首先第一步EF创建数据库 创建两个类,一个是图书类,一个是图书类别的类 using System; using System.Collections.Generic; us ...
- Spring MVC 学习总结(七)——FreeMarker模板引擎与动态页面静态化
模板引擎可以让程序实现界面与数据分离,业务代码与逻辑代码的分离,这就提升了开发效率,良好的设计也使得代码复用变得更加容易.一般的模板引擎都包含一个模板解析器和一套标记语言,好的模板引擎有简洁的语法规则 ...
- 转:php页面静态化之真静态
之前的缓存和现在所说的页面静态化都是为网站提速的,如果是访问量小的小型网站可能不需要但是如果网站规模或访问量很大,那么页面静态化和缓存就会体现出各自的价值了下面先来了解下页面静态化的分类 页面静态化的 ...
- Django框架开发web网站的网页优化—页面静态化
网站优化-页面静态化 1)概念 提前将页面所用到的数据从数据库查询出来,然后生成一个静态页面,之后用户来访问的时候,直接返回静态页面. 举例:首页静态化:获取首页用到的数据表中的数据,生成静态首页in ...
- freemark 页面静态化
1. 页面静态化是什么? 页面静态化有非常多含义,在WEB开发中.静态网页一般理解为站点中大部分超级链接所引用的页面是单独的HTML静态页面文件(如.htm..html等页面文件,html语言本身是静 ...
- 量体裁衣方得最优解:聊聊页面静态化架构和二级CDN建设
量体裁衣方得最优解:聊聊页面静态化架构和二级CDN建设 上期文章中我们介绍了CDN和云存储的实践,以及云生态的崛起之路,今天,我们继续聊一聊CDN. 我们通常意义上讲的CDN,更多的是针对静态资源类的 ...
- Asp.Net MVC页面静态化功能实现二:用递归算法来实现
上一篇提到采用IHttpModule来实现当用户访问网站的时候,通过重新定义Response.Filter来实现将返回给客户端的html代码保存,以便用户下一次访问是直接访问静态页面. Asp.Net ...
- Asp.Net MVC页面静态化功能实现一:利用IHttpModule,摒弃ResultFilter
上一篇有提到利用IHttpModule和ResultFilter实现页面静态化功能.后来经过一些改动,将ResultFilter中要实现的功能全部转移到IHttpModule中来实现 Asp.Net ...
- Asp.Net MVC页面静态化功能实现一:利用IHttpModule和ResultFilter
由于公司现在所采用的是一套CMS内容管理系统的框架,所以最近项目中有一个需求提到要求实现页面静态化的功能.在网上查询了一些资料和文献,最后采用的是小尾鱼的池塘提供的 利用ResultFilter实现a ...
随机推荐
- 【FreeRTOS学习02】源码结构/数据类型/命名规则总结
个人不是很喜欢FreeRTOS的编程风格,但是没办法,白嫖人家的东西,只能忍了,这里先简单总结一下: 相关文章 [FreeRTOS实战汇总]小白博主的RTOS学习实战快速进阶之路(持续更新) 文章目录 ...
- hadoop文件系统常用操作
详细可参考hadoop官方文档filesystem shell一节 使用hadoop离不开文件系统,比如hdfs,我们可能需要从hdfs中读取文件作为输入,并将输出保存到hdfs上某个文件中 首先创建 ...
- python语法学习第九天--else和with语句
else: while/for else:正常执行完循环(非break)执行else中代码 try else:未捕捉到异常,执行else中代码 with: 语法格式: with open('666.t ...
- [csu1508 地图的四着色]二分图染色
抽象后的题意:给一个不超过30个点的图,A从中选不超过5个点涂红绿两种颜色,B用黑白两种颜色把剩下的涂完,任意一条边两端的颜色不同,求每种颜色至少用涂一次的方案数 思路:枚举A涂的点的集合,将原图分成 ...
- [hdu4497]分解质因数
题意:求满足gcd(x,y,z)=G,lcm(x,y,z)=L的x,y,z的解的个数. 大致思路:首先如果L % G != 0那么无解,否则令u = L / G,问题变为,gcd(r,s,t)=1,l ...
- jquery监听input
$(function(){ //输入框正在输入时 $("#ipt").on('input',function(){ if(!($('#ipt').val()=='')){ $(&q ...
- 挺好用的socks5库go-socks5
1.挺好用的socks5库 github.com/armon/go-socks5 2.示例代码 // Create a SOCKS5 server conf := &socks5.Config ...
- python Lambda, filter, reduce and map
1. lambda The lambda operator or lambda function is a way to create small anonymous functions , i.e. ...
- Codeforces1157A(A题)Reachable Numbers
A. Reachable Numbers Let's denote a function f(x)f(x) in such a way: we add 11 to xx, then, while th ...
- 3.4 Go字符型
1. Go字符型 Golang 中没有专门的字符类型,如果要存储单个字符(字母),一般使用 byte 来保存. 普通字符串就是一串固定长度的字符连接起来的字符序列. Go 的字符串是由单个字节连接起来 ...