如何阅读Response.Filter.Write方法中的完整html?

时间:2012-07-23 14:13:31

标签: c# asp.net asp.net-mvc

我正在使用Response.Filter。我重写了Write方法。但我观察到Write方法正在执行多次,并且Write方法中的响应html进入了分块状态。如何在Write方法中读取(然后过滤)完整的html。

1 个答案:

答案 0 :(得分:1)

您应该避免这样做,因为它可能会对您的网站产生性能影响。过滤器是流,它们是低级的,并且用于直接处理响应字节,因此非常适合执行Gzip压缩等操作。

您应该尝试在块中进行理想的过滤操作。如果你真的不能,你可以根据MemoryStream编写一个过滤器。请记住,您将创建一个内存缓冲区,因此请确保您的响应相对较短。

public class ReadAllIntoMemoryFilter : MemoryStream
{
    private readonly Stream _baseFilter;

    public ReadAllIntoMemoryFilter(Stream baseFilter)
    {
        _baseFilter = baseFilter;
    }

    public override void Close()
    {
        var bytes = GetBuffer();

        // do your work here

        _baseFilter.Write(bytes, 0, bytes.Length);
        _baseFilter.Close();
        base.Close();
    }
}