ASP.Net相对重定向和资源路径

时间:2012-12-27 18:20:06

标签: asp.net url-rewriting relative-path

我们正在努力将ASP网站转换为ASP.Net,并且遇到重定向和资源位置问题。我们的问题来自于我们设置的特殊性。我们的网站可以通过两种方式访问​​:

  1. 直接通过网址:http://www.mysite.com - 在这种情况下一切正常
  2. 通过代理服务器使用以下网址:http://www.proxy.com/mysite_proxy/proxy/
  3. 在#2中,“mysite_proxy”是proxy.com上的一个映射,它将幕后请求定向到www.mysite.com,“proxy”是一个虚拟子网站,只是将请求重定向到www的根目录。 mysite.com。它本质上是为了给我们提供一种方便的方式来了解请求是否从代理中访问该站点。

    我们在此设置中遇到两个问题:

    1. 使用带有“〜”的Response.Redirect或普通相对路径(Default.aspx)生成302响应,其位置为“/proxy/rest_of_the_path.aspx”。这导致浏览器请求http://www.proxy.com/proxy/rest_of_the_path.aspx这不是什么,甚至没有命中我们的服务器所以我们在重写之后无法做到。
    2. 在我们的页面中使用基于“〜”的链接,图像,样式表等创建相同类型的路径:“/ proxy / path_to_resources.css”。我们可以通过使用所有这些资源的相对路径来解决其中的一些问题,尽管这将是很多工作,并且它不会解决框架和第三方组件生成的类似资源链接。
    3. 理想情况下,我想找到一个全局修复程序,使这些问题对于在网站上工作的开发人员来说是透明的。我现在有一些想法:

      1. 摆脱代理,它并不是真正需要的,是出于管理而非技术原因。最容易在技术上完成,在现实世界中最难完成。
      2. 将问题移交给运行代理的组,并说他们需要修复问题。
      3. 使用响应过滤器在将原始html发送到客户端之前对其进行修改。我知道这可以修复我的资源链接,但我不确定标题(需要测试它),并且必须解析每个响应寻找和重写URL会有性能损失。
      4. 所有这些解决方案在我的脑海中都有很大的负面影响,我希望有人可能有另一个想法。那么有什么想法吗?

        除此之外:已经有很多帖子已经解决了这个问题的反面:我有一个相对的URL,我怎么可能是绝对的,但我没有遇到任何适合其他人的账单方向。

1 个答案:

答案 0 :(得分:0)

作为修复,我将使用Global.asax中的一个小检测例程:Session_Start(因为我想代理实际上并没有启动另一个应用程序实例),使用正确的路径设置会话变量,并使用它而不是'〜'。

如果使用了不同的应用程序实例,则使用Application_Start而不是Session_Start和静态Global变量而不是Session变量。