在代理路由的情况下获取原始请求URL

时间:2017-04-12 11:01:57

标签: c# asp.net asp.net-mvc proxy http-proxy

我必须在请求期间生成一个URL。此URL必须以绝对路径(电子邮件中的链接到主叫用户)引导应用程序本身。 现在我遇到的问题是,在某些情况下,应用程序在使用不同代理的环境中运行。不同的用户只能访问其中一个代理,而不能访问应用程序本身。所以我必须使用发送到代理的URL,而不是代理用来调用应用程序的URL。

目前我使用HttpRequest.Current来构建URL。 在这种情况下,提供了错误的URL。

.net类中的属性或代理标准(HTTP-Headers,...)是否有保留原始URL的属性?

2 个答案:

答案 0 :(得分:0)

目前,我使用的解决方案虽然不是很好但工作正常: 我使用登录到应用程序来请求客户端URL(登录请求发送客户端URL)并将此信息存储在用户会话中。所以我可以用它来生成所需的URL。

答案 1 :(得分:0)

不幸的是,网络上没有任何“标准”,如果在您的Host中它读取了错误的url,则唯一的选择是向代理添加标头以传递到您的应用。对于nginx,我在conf文件中使用了类似的东西:

location /couch/api/ {
        proxy_pass         https://0.0.0.0:5030;
        proxy_http_version 1.1;
 
        proxy_cache_bypass $http_upgrade;
        
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $http_connection;  
        
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   X-Forwarded-Host $host; # <-- this is the saver!
    }

应用收到的结果标头:

Host : 0.0.0.0:5040 <--- okay this is wrong.. it's behind proxy
X-Forwarded-For : 180.291.138.555 
X-Forwarded-Proto : https 
X-Forwarded-Host : mysupadomain.com <--- success =)