加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 如何在响应流中将字符串插入到我想要的任何位置?

发布时间:2020-12-16 07:15:10 所属栏目:asp.Net 来源:网络整理
导读:可能有一种简单的方法可以做到这一点,但我看不到它…… 我创建了一个简单的Http模块,它在PreRequestHandler上启动一个计时器,并停止PostRequestHandler上的计时器来计算页面加载所花费的时间. 然后我创建一些简单的html并将我的结果写入Response.Write.因为
可能有一种简单的方法可以做到这一点,但我看不到它……

我创建了一个简单的Http模块,它在PreRequestHandler上启动一个计时器,并停止PostRequestHandler上的计时器来计算页面加载所花费的时间.

然后我创建一些简单的html并将我的结果写入Response.Write.因为我在PostRequestHandler中这样做,所以在< / html>之后添加我的结果.标签.这对测试很好,但我需要在页面需要验证的情况下.

我似乎无法弄清楚如何操作Response对象以在< / body>之前插入我的结果标签. Response.Write和Response.Output.Write没有这种灵活性,我无法看到使用Response作为字符串的方法.我错过了一些容易的事吗?

解决方法

为此,您必须实现自己的流对象,并将其用作响应的过滤器.

对于isntance:

public class TimerStream : Stream
{
    private Stream inner { get; set; }
    private StringBuilder   responseHtml;

    public TimerStream(Stream inputStream) { 
        inner = inputStream; 
        responseHtml = new StringBuilder();
        // Setup your timer
    }

    /* Filter overrides should pass through to inner,all but Write */
    public override void Write(byte[] buffer,int offset,int count)
    {
        string bufferedHtml = System.Text.UTF8Encoding.UTF8.GetString (buffer,offset,count);
        Regex endTag = new Regex ("</html>",RegexOptions.IgnoreCase);

        if (!endTag.IsMatch (bufferedHtml))
        {
            responseHtml.Append(bufferedHtml);
        }
        else
        {
            // insert timer html into buffer,then...
            responseHtml.Append (bufferedHtml);
            byte[] data = System.Text.UTF8Encoding.UTF8.GetBytes (responseHtml.ToString ());            
            inner.Write (data,data.Length);            
        }
    }
}

然后,在你的HttpModule中,你将它添加到你的BeginRequest:

// Change the Stream filter
HttpResponse response = context.Response;
response.Filter = new TimerStream(context.Response.Filter);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读