用Response.Filter生成静态页
using System;
using System.IO;
using System.Web.UI;
using System.Web;
using URLRewriter.Config;
using System.Configuration;
using System.Text.RegularExpressions;
namespace URLRewriter
{
/**//**/
/**//// <summary>
/// 生成htm静态页面
/// </summary>
public class ResponseFilter : Stream
{
private Stream m_sink;
private long m_position;
private FileStream fs;
private string filePath = string.Empty;
public ResponseFilter(Stream sink, string filePath)
{
this.m_sink = sink;
this.filePath = filePath;
}
// The following members of Stream must be overriden.
public override bool CanRead
{ get { return true; } }
public override bool CanSeek
{ get { return false; } }
public override bool CanWrite
{ get { return false; } }
public override long Length
{ get { return 0; } }
public override long Position
{
get { return m_position; }
set { m_position = value; }
}
public override long Seek(long offset, System.IO.SeekOrigin direction)
{
return 0;
}
public override void SetLength(long length)
{
this.m_sink.SetLength(length);
}
public override void Close()
{
this.m_sink.Close();
this.fs.Close();
}
public override void Flush()
{
this.m_sink.Flush();
}
public override int Read(byte[] buffer, int offset, int count)
{
return m_sink.Read(buffer, offset, count);
}
// Override the Write method to filter Response to a file.
public override void Write(byte[] buffer, int offset, int count)
{
//首先判断有没有系统错误
if (HttpContext.Current.Error == null)
{
try
{
if (fs == null)
this.fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write);
//将数据写入静态文件.
this.fs.Write(buffer, 0, count);
}
catch
{
if (fs != null)
{
//关闭流
this.fs.Close();
//删除静态页面
if (File.Exists(filePath))
{
File.Delete(filePath);
return;
}
}
}
}
//Write out the response to the browser.
this.m_sink.Write(buffer, 0, count);
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)