响应过滤器中的URL重写

时间:2009-04-15 16:13:19

标签: c# asp.net

我们正在尝试在外部代理服务器的响应中重写一些URL。我们注意到响应在通过响应过滤器时被分解。然后,我们使用正则表达式来定位URL并重写它们。我们遇到的问题是它被分解的方式(不确定它是如何被分割的),我们有一个URL在块之间切成两半,所以我们的正则表达式没有在无论是块还是没有重写。

实施例

Chunk1的结尾

"...<body><a href="http://myserver.local/">

Chunk2的开始

"path/file.aspx">Some link</a>..."

因此我们的正则表达式不会将链接作为有效的URL。我们尝试将我们的响应汇集到一个StringBuilder中,以确保在我们尝试重写URL之前我们有完整的响应,但这会导致视图状态被破坏。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

在我使用的Java平台上(抱歉,不熟悉asp.net)我们使用实用程序方法编写URL。这样,url重写可以挂钩到该方法并重写整个URL。

优点是可以非常有效地完成。缺点是你永远不能只在HTML中放置一个裸url,你总是必须使用helper方法。但是,对于J2EE来说,这被认为是一种正常的最佳实践,因此在我们的情况下开销并不大。

为了实现重写,我们有一个包装http响应并覆盖encodeURL方法的过滤器。我不确定.net是否有类似的概念。

答案 1 :(得分:0)

如果性能至关重要,您可能希望使用自己的DFA scanner实现。

创建所需表格的工具例如是GOLD Parsing System(只需跳过LALR内容,它会处理DFA扫描仪找到的令牌中的语法)。

答案 2 :(得分:0)

您的超链接是如何生成的?如果您使用ASP.Net链接控件来生成您的URL;您可以使用自定义链接控件将链接控件子类化。检测到代理后,这个新的链接控件将动态重写您的链接;因此,在生成HTML之前,链接会根据需要进行更改。