2011-08-15 52 views
3

我正在开发一个Web应用程序,它需要向用户发送电子邮件,指示他们浏览属于原始应用程序的某些页面。我当前的代码生成锚的href如下:使用代理提取请求URI

String.Format("{0}{1}{2}{3}/{4}", 
    Request.Url.Scheme, Uri.SchemeDelimiter, Request.Url.Host, 
    Request.ApplicationPath, path); 

的目的是,它会工作,并链接到正确的网站,无论我是否在开发服务器,测试服务器或上运行的网站生产服务器。但是,我有一些缺点,我正在寻找一些解决方法。

  1. Request.Url.Scheme不适用于我们所有情况。我们的生产服务器需要https连接。代理获取https连接,解密请求并将其转发到我们的Web服务器上。因此,Request.Url.Scheme将始终显示http
  2. Request.Url.Host正在返回我们的生产服务器的本地服务器名称;我认为这也与代理问题有关。
  3. 已阅读另一篇建议使用Request.Headers["host"]的文章。不知道这是否会遭遇同样的问题。

是否有人对HTTP/HTTPS,转发和ASP.Net的处理这个haz德codez(或可以指向我在正确的方向)更多的知识?

基本上,如果用户使用http从dev.example.com的服务器接收到电子邮件,则电子邮件中的Uri应为http://dev.example.com/page.aspx。如果用户通过https使用生产服务器secure.example.com(由Web代理处理),则链接应为https://secure.example.com/page.asx

回答

2

从我处理单一登录实施的经验来看,我们的代理没有提供有关原始请求的任何信息。我们没有找到解决https的问题,这是不幸的。

我不是100%,但我认为应用程序请求路由包可能允许HTML内的返回的URL重写为在代理之外工作。例如。如果您将其作为返回,则可能会将其重写为https://server.com/page.aspx。另外,您可以指定将相关代理服务器上的http连接升级为https的规则。所以你将有一个初始的http请求跳转到https。

此外,您可能还希望您的开发人员服务器尽可能与您的prod服务器一起工作,解决这些问题。

+0

感谢您的回答。我将把这个作为提案提交给我们的管理人员,看看会发生什么。你对开发和产品尽可能匹配的要求非常好,这是一个问题,我们一直在努力争取资源来实现目标。 – Anthony

+0

各处都一样:)当我们转向更为结构化的发布方法时,我们最终确信管理层 - 他们的购买是出于合规性原因。当他们看到有多少次发布漏洞时,因为在周期后期发现了环境问题......突然之间变得很重要。 –