我试图拦截一个asp.net Web请求,并基于查找替换将要呈现给客户端的页面。
例如: 如果我的网络服务器上有“/ about-us”请求,我将首先看看我是否在数据库中有这个版本,否则我将恢复为平面文件。 我将从数据库中检索的版本将是一个.aspx页面,必须进行渲染并包含Web控件和内联服务器端脚本。
最好的方法是什么?
我已经尝试重写CreateHtmlTextWriter方法但是这个过程似乎太晚了,因为传递给此方法的TextWriter已经实例化了。
我还尝试实现自己的PageHandlerFactory,但这似乎创建了一个Page的实例,我似乎无法覆盖它的Response.Output流的内部设置。
我在这里咆哮错误的树吗? 什么是最好的方法?
答案 0 :(得分:3)
实现您自己的HttpHandler
- 这可以拦截调用,您可以从数据库或文件系统中提取内容并将其作为响应发送。您只需在类中实现IHttpHandler
并配置IIS即可使用它。
如果您要做的只是输出文本(以ASPX页面的形式),那么它将不会通过IIS aspx引擎。要做到这一点,你必须动态加载,编译和执行这样的页面 - 这是一件非常困难的事情。 This Microsoft知识库文章可以提供帮助。
答案 1 :(得分:0)
你要遇到的问题是,只是检索一个aspx页面并呈现它将无法正常工作,并且你无法动态加载ASPX页面,你必须使用Server.Transfer或Response.Redirect
您可以通过用户控件和Page.LoadControl使用虚拟路径提供程序从数据库中获取控件,但我认为这将是复杂的并且过度设计。
如果您有时间研究它并获得框架支持,我肯定会考虑使用ASP.Net MVC。