将URL从Web客户端路由回Web客户端

时间:2012-11-06 21:56:40

标签: c# asp.net .net asp.net-mvc routing

我有一个ASP.NET控制器,它有一个函数,只返回WebClient的ContentResult。

在这种情况下,CNN是我的测试平台,我的WebClient,将CNN作为字符串下载到其内容中,并将结果作为ActionResult / ContentResult返回到控制器上。

我正在调用此动作的RenderPartial,让CNN在其下方和我当前内容的右侧显示在自己的框中。

我遇到的问题是,当你点击CNN上的一个链接时,它有时会重定向到一个“相对”网址,而那个相对网址在我的localhost中不存在,并且不存在于我的身上网络服务器,因此链接失败。

当它重定向到绝对URL时,这也是一个问题,因为生成的页面“替换”了我的.NET shell。

我需要它做的是获取我返回的ContentResult内的任何URL,如果点击了这些URL中的任何一个,将它们传递回我的.NET应用程序,由WebClient下载并呈现回来在那个壳里。

我知道我可以使用IFRAME来代替WebClient,但在我的情况下,IFRAME是不可能的,因为它受到我们正在使用的公共API的限制,它在API的框架中受到限制/存在缺陷正在服务,它在我们无法控制的一些客户机器上被阻止。

此外,客户端计算机将离开我们的网络,因此我无法使用AJAX负载,因为它是XSS。

我能想到的一个想法,基本上是创建自定义路由,使用过滤器/规则,查找链接等“CNN”,并将它们作为参数传递给我的控制器;然后让我的控制器渲染我的页面,并将这些链接传递给Web客户端。

这显然需要做很多工作,甚至不确定在路由引擎中从哪里开始。

我能想到的另一件可能有用的事情就是检查URL的有效性,试图查看它是否指向有效链接。如果它没有指向有效链接,则向其添加CNN的url前缀,并查看该链接是否为有效链接。但这似乎是很多工作,对于一个会对性能造成重大打击的解决方案,因为检查像CNN这样的页面上的每个链接可能会非常昂贵。此外,由于我将每次运行两次链接,这是一个需要POST操作的问题,因为它基本上每次运行两次操作,并且这是一个公共API,我正在消耗公共框架,我不会控制源代码来防止这种情况发生。

还有其他建议吗? 有没有办法轻松完成我想要做的事情?

0 个答案:

没有答案