【问题标题】:How can I programmatically modify an aspx file content before the handler handle it?如何在处理程序处理它之前以编程方式修改 aspx 文件内容?
【发布时间】:2012-04-30 05:05:56
【问题描述】:

我需要修改一个 aspx 的内容(不是物理上,而是改变内存中的内容)的原因是因为在处理整个 aspx 之前,我需要将某些自定义标签解析为正确的数据HttpHandler。

有办法吗?

【问题讨论】:

    标签: asp.net httphandler httpmodule


    【解决方案1】:

    您可以使用响应过滤器 (HttpFilter) 并即时修改内容,基本上是在响应形成之后,在 EndRequest 调用您的过滤器之前(它是流后代),您可以根据需要对其进行修改。在 HttpModule 的 Init 方法中,您必须安装 HttpFilter (Response.Filter),它将为该请求调用。

    这是一篇好文章:

    http://aspnetresources.com/articles/HttpFilters

    更新: 也许这是XY Problem 的情况,您可以通过简单的服务器控件来解决您的问题,该控件将正确呈现这些自定义标签。

    【讨论】:

    • 谢谢 - 但我需要先解析文档,然后再由 aspx 处理程序处理 - 有什么建议吗?
    • 我不明白,你说的文档是什么意思?在处理 Request 之前没有要解析的内容。
    • 可能他希望将 ASPX 文件的内容视为一个字符串,对其进行修改,然后让它流过 ASP.NET 管道,以便被解释为实际的 ASPX 页面。
    • 好吧,如果是这样的话,这是 IMO 错误的解决问题的方法,如果没有其他关于性能的问题,而且在简单的服务器控件中处理该自定义标签要复杂得多。
    【解决方案2】:

    你可以使用渲染事件

    Protected Overrides Sub Render(ByVal writer As HtmlTextWriter)
    
    
        Dim sw As New System.IO.StringWriter
        Dim hw As New HtmlTextWriter(sw)
        MyBase.Render(hw)
        Dim html As String = sw.ToString()
    
        ' html = html.Replace() etc to change your html code in here
    
        writer.Write(html)
    End Sub
    

    编辑我看到你想在asp.net处理aspx之前动态注入标记,也许FileLevelPageControlBuilder类是有用的

    【讨论】:

    • 谢谢 - 但我需要在它被 aspx 处理程序处理之前解析文档 - 所以基本上它在页面事件之前要早得多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多