我当前的问题与this one密切相关,但更为具体。我们必须为该问题中描述的目标制定设计策略。
我们希望通过ASP.NET网络表单上的重写HTML 来实现这一目标。我的问题是:根据可行性,性能影响和对遗留应用程序的实施工作的参数,哪种策略最佳。
基本上是获取Web窗体的HTML输出,解析它,并根据用户定义的规则替换某些URL。在该示例中,我将所有静态内容重写为CDN URL,但它可以轻松扩展到URL重写技术。我发现很多(我的意思是很多)有关网址重写的文章,从将http://myblog.com/2092
这样的网址解释为http://myblog.com/Default.aspx?post=2092
的角度来看,但我发现没有人告诉我如何巧妙地将旧式URL格式化为更短的格式,直接从HTML内部(因此页面将直接呈现短格式URL)[编辑]而无需深入的代码干预。
与上述问题的答案中建议的一样,编写一个拦截HTML并重写它的HTTP模块。实际上,我环顾四周,看到我可以设置一个执行HTML过滤的Response.Filter
流对象。
Stream
的{{1}}方法,该方法在一般情况下对部分缓冲区进行操作,可能会导致更换不良。假设首先使用像Write
这样的chunk调用Write方法(我假设ttp://mydomain.com/static/ima
之前已经写过),然后调用<img src="h
(所以猜测最终的URL :-P)并重写将ge.png" />
正则表达为http://mydomain.com/static/[^"]*
的规则,替换未完成。要解决这个问题,我可以使用MemoryStream或类似的东西来缓冲完整的数据集,然后执行替换,但这可能会导致高负载服务器出现问题以here描述的方式覆盖http://cdn.com/path/$1
的{{1}}方法
显然,对于我们必须开发的新的webapps,我会采用策略2,但我非常喜欢使用动态组件,因为当应用程序需要它们时可以轻松插入(如果我们的新应用程序将在没有CDN的情况下安装,则该功能将被关闭)。
你如何解决两种策略的缺点(特别是第一次)?当然,你有其他策略来建议实现这个目标吗?
谢谢。
答案 0 :(得分:4)
也许你可以使用ASP.NET的“自适应控制行为”功能。见Architectural Overview of Adaptive Control Behavior
基本上,您将重新定义新的HtmlTextWriter
类,将其关联为默认渲染器,并使用您自己的代码覆盖“A”标记渲染。