【发布时间】:2011-12-02 06:09:03
【问题描述】:
第一个问题!
环境
MVC、C#、AppHarbor。
问题
我正在调用一个 openid 提供程序,并根据域生成一个绝对回调 url。
在我的本地机器上,如果我点击http://localhost:12345/login,这可以正常工作
Request.Url; //gives me `http://localhost:12345/callback`
但是,在我正在部署的 AppHarbor 上,因为他们使用的是非标准端口,即使我在“http://sub.example.com/login”上点击它
Request.Url; //gives me http://sub.example.com:15232/callback
这搞砸了我的回调,因为端口号不在原始源 URL 中!
我试过了
- Request.Url
- Request.Url.OriginalString
- Request.RawUrl
全部给我“http://sub.example.com:15232/callback”。
还要澄清这不是领域问题,我从 DotNetOpenAuth 收到的错误消息是
'http://sub.example.com:14107/accounts/openidcallback' not under realm 'http://*.example.com/'.
我不认为我已经把它塞进去了?
现在,我要考虑一些 hacky 的东西,比如
- 预处理器命令(#IF DEBUG THEN PUT PORT)
- 字符串替换(Request.URL.Contains("localhost"))
所有这些都不是 100% 的解决方案,但我厌倦了思考我可能缺少的简单属性。我也读过this,但这似乎没有一个公认的答案(更多的是关于路径而不是权威)。所以我把它放在你们身上。
总结
所以如果我有http://localhost:12345/login,我需要从请求上下文中获取http://localhost:12345/callback。
如果我有“http://sub.example.com/login”,我应该得到“http://sub.example.com/callback”,不管它在哪个端口上。
谢谢! (睡觉时间,早上会回答任何问题)
【问题讨论】:
标签: c# asp.net-mvc port httprequest appharbor