Первый вопрос!
Окружающая среда
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".
Также, чтобы выяснить, что это не проблема Realm, я получаю сообщение об ошибке от DotNetOpenAuth:
'http://sub.example.com:14107/accounts/openidcallback' not under realm 'http://*.example.com/'.
Не думаю, что я это запутал?
Теперь я собираюсь рассмотреть некоторые хакерские вещи, такие как
- команды препроцессора (#IF ОТЛАДКА ПОСЛЕ ТОГО, КАК PUT)
- string replace (Request.URL.Contains ("localhost"))
Все это не 100% -ные решения, но мне надоело размышлять над тем, что может быть простым свойством, которое мне не хватает. Я также прочитал это , но, похоже, на этот вопрос нет принятого ответа (и больше о пути, чем о авторитете). Так что я обращаюсь к вам, ребята.
Резюме
Так что, если у меня было http://localhost:12345/login
, мне нужно получить http://localhost:12345/callback
из контекста запроса.
И если бы у меня было "http://sub.example.com/login",, я должен получить" http://sub.example.com/callback", независимо от того, к какому порту он подключен.
Спасибо! (Время сна, утром отвечу на любые вопросы)