用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);

}

}

}

posted @   94cool  阅读(177)  评论(0编辑  收藏  举报
编辑推荐:
· 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)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示