我有一个 ASP.NET 控制器,它有一个函数,它只返回一个 WebClient 的 ContentResult。
在这种情况下,CNN 是我的测试平台,我的 WebClient,将 CNN 作为字符串下载到它的内容中,并将结果作为控制器上的 ActionResult/ContentResult 返回。
我在这个动作上调用了一个 RenderPartial,让 CNN 在它自己的框中显示我当前内容的“下方”和右侧。
我遇到的问题是,当您单击 CNN 上的链接时,它有时会重定向到“相对”网址,而该相对网址在我的本地主机中不存在,并且在我的网络服务器上也不存在,因此链接失败。
当它确实重定向到绝对 url 时,这也是一个问题,因为生成的页面“替换”了我的 .NET shell。
我需要它做的是获取我返回的 ContentResult 中的任何 URL,如果单击了这些 URL 中的任何一个,则将它们传递回我的 .NET 应用程序,由 WebClient 下载,并在该 shell 中呈现.
我知道我可以使用 IFRAME 而不是 WebClient 来执行此操作,但在我的情况下 IFRAME 是不可能的,因为它受到我们正在使用的公共 API 的限制,它在 API 所服务的框架中受到限制/存在缺陷,并且它在我们无法控制的一些客户端机器上被阻止。
此外,客户端机器将脱离我们的网络,所以我不能使用 AJAX 加载,因为那将是 XSS。
我能想到的一个想法基本上是使用过滤器/规则创建自定义路由,以查找类似“CNN”的链接,并将它们作为参数传递给我的控制器;然后让我的控制器呈现我的页面,并将这些链接传递给 Web 客户端。
这显然需要做很多工作,甚至不确定在路由引擎中从哪里开始。
我能想到的唯一另一件事可能是通过尝试查看它是否指向有效链接来检查 URL 的有效性。如果它没有指向一个有效的链接,则添加 CNN 的 url 前缀,然后查看它是否是一个有效的链接。但这似乎需要做很多工作,对于一个会对性能造成严重影响的解决方案,因为检查像 CNN 这样的页面上的每个链接可能会非常昂贵。此外,由于我将运行每个链接两次,这将是一个需要 POST 操作的问题,因为它基本上会运行每个操作两次,并且这是一个公共 API,我正在使用公共框架,我无法控制源代码来防止这种情况发生。
还有其他建议吗?有什么方法可以轻松完成我想做的事情吗?