C# 将URL从web客户端路由回web客户端

C# 将URL从web客户端路由回web客户端,c#,asp.net,.net,asp.net-mvc,routing,C#,Asp.net,.net,Asp.net Mvc,Routing,我有一个ASP.NET控制器,它有一个函数,只返回WebClient的ContentResult 在本例中,CNN是我的测试平台,我的WebClient,将CNN作为字符串下载到它的内容中,并将结果作为控制器上的ActionResult/ContentResult返回 我打电话给RenderPartial,让CNN在我当前内容的右侧显示“下方”,在它自己的框中 我遇到的问题是,当你点击CNN上的链接时,它有时会重定向到“相对”url,而该相对url在我的本地主机中不存在,在我的web服务器上也不

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

在本例中,CNN是我的测试平台,我的WebClient,将CNN作为字符串下载到它的内容中,并将结果作为控制器上的ActionResult/ContentResult返回

我打电话给RenderPartial,让CNN在我当前内容的右侧显示“下方”,在它自己的框中

我遇到的问题是,当你点击CNN上的链接时,它有时会重定向到“相对”url,而该相对url在我的本地主机中不存在,在我的web服务器上也不存在,因此链接失败

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

我需要它做的是,获取我返回的ContentResult中的任何URL,如果单击了其中任何URL,将它们传递回我的.NET应用程序,由WebClient下载,并在该shell中呈现

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

此外,客户端机器将脱离我们的网络,因此我不能使用AJAX负载,因为这将是XSS

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

这显然需要大量的工作,甚至不确定在路由引擎中从何处开始

我唯一能想到的另一件事是检查URL的有效性,通过尝试查看它是否指向有效链接。如果它没有指向一个有效的链接,添加CNN的url前缀,然后看看这是否是一个有效的链接。但这似乎是一项艰巨的工作,对于一个将对性能产生重大影响的解决方案来说,检查CNN等页面上的每个链接可能会非常昂贵。另外,由于我会运行每个链接两次,这是一个需要POST操作的问题,因为它基本上会运行每个操作两次,而且由于这是一个公共API,我正在使用一个公共框架,所以我无法控制源代码来防止这种情况

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

简单地说;不,没有一个简单的解决方案来完成你想做的事情。如果你想以这种方式重新构建一个完全不同的网站的内容,你就必须要做一些工作。那么,我通过自定义路由所追寻的路径可能是我最有效/安全的路径,嗯?我实际上没有一个好的答案给你,你说CNN是你的测试平台,但你打算显示多少其他网站的内容?所有这些都将显示为类似的相对链接,那么您打算如何区分实际的预期路径?您可以应用一些技术来尝试使用正确的URI更改已删除内容中的URI路径,但随后会遇到不应替换这些URI的问题(图像src、脚本src、样式href等)。祝你好运,但不确定是否有人有好的方法让你失望(是的,我想我的工作是为我量身定做的,不管我怎么看。我还没有尝试过这个-老派-如果你在解析HTML,看看注入是否能做到-如果能做到,就像做你在上一段中提到的那样,只是更简单…好奇看看它是否能做到,所以如果你能发布结果,请做:)