asp.net - 我怎么能在我想要的任何地方插入一个字符串到响应流中?

标签 asp.net asp.net-mvc string httpmodule response.write

可能有一个简单的方法可以做到这一点,但我看不到它......

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

然后我创建一些简单的 html 并将结果写入 Response.Write。由于我在 PostRequestHandler 中执行此操作,因此在 </html> 之后添加了我的结果。标签。这对测试很好,但我需要在页面需要验证的情况下。

我似乎无法弄清楚如何操纵 Response 对象以在 </body> 之前插入我的结果。标签。 Response.Write 和 Response.Output.Write 没有这种灵 active ,我看不到将 Response 作为字符串处理的方法。我错过了一些简单的事情吗?

最佳答案

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

例如:

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, 0, data.Length);            
        }
    }
}

然后,在您的 HttpModule 中,将其添加到您的 BeginRequest 中:
// Change the Stream filter
HttpResponse response = context.Response;
response.Filter = new TimerStream(context.Response.Filter);

关于asp.net - 我怎么能在我想要的任何地方插入一个字符串到响应流中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2791123/

相关文章:

.net - String.Join 与 StringBuilder : which is faster?

Python - 将字典和键值列表转换为字符串

c# - 从 C# 访问远程目录

javascript - 使用 HTML5 JS 和 Twitter Bootstrap 格式以不同方式托管 ASP.Net

javascript - 如何在 Vue.js 中的模板元素中进行字符串插值?

c# - 使用 AzureReader2 插件的 Azure ImageResizer 无法调整大小

javascript - 应该如何处理 ajax 加载的局部 View 中的 javascript?

c# - 使用多列上的下拉菜单过滤 asp gridview 标题

javascript - ASP.NET Core Angular Spa 项目 JavaScriptServices 中没有 Guard 的提供程序

asp.net-mvc - KendoUI 网格 Ajax 绑定(bind)参数选择