【问题标题】:Rewrite ASP.NET page output重写 ASP.NET 页面输出
【发布时间】:2009-04-03 03:03:20
【问题描述】:

一点背景知识:我正在尝试使用高度剥离的 ASP.NET 实现来创建一个轻量级的无 cookie 数据库支持的用户会话。该站点的受众将是通过蜂窝网络连接的移动用户,因此页面大小需要非常小。我没有使用 .NET 会话、视图状态等,并且大多数页面包含很少的服务器控件(如果有的话)。

我希望能够处理页面请求的输出,以便我可以使用自己的会话信息修改响应中的内部链接。我已经读到有一个 ISAPI 过滤器允许 ASP.NET 之前的无 cookie 会话。这基本上就是我想要构建的,就在应用程序内部。

有人做过这样的事吗?由于其他原因,我已经为我的页面库继承了 System.Web.UI.Page 类。看来我应该可以从这里做点什么了。

谢谢

【问题讨论】:

    标签: asp.net session


    【解决方案1】:

    HttpModules 可以让您完全控制您的输出,但您还可以做一些其他更简单的事情。

    1. 为 Response.Filter 创建一个自定义过滤器。您或多或少创建了一个 Stream,您可以在将其发送到底层流之前运行所有内容,让您在那里进行更改。

    2. 覆盖页面的渲染事件并将所有内容写入字符串,然后在那里进行更改...例如...

    .

    //this is from memory, you might need to check it
    override void Render(HtmlTextWriter writer) {
    
    StringWriter html = new StringWriter();
    HtmlTextWriter render = new HtmlTextWriter(html);
    base.Render(render);
    string output = html.ToString()
    
    //make your changes to output
    //output = ???
    
    writer.Write(output);
    
    }
    

    【讨论】:

    • 好的,我认为您的意思是 Response.Filter。这似乎是我一直在寻找的。非常感谢!
    【解决方案2】:

    考虑为此使用 HttpModule。您可以在退出时处理整个响应。

    您还可以使用基类做一些事情——也许在 PreRenderComplete 事件中浏览所有可能在其中包含链接的服务器端控件。不过,这对 HTML <A> 标签没有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      • 2014-04-17
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      相关资源
      最近更新 更多