Первый вопрос!
Окружающая среда
MVC, С#, 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 DEBUG THEN PUT PORT)
- string replace (Request.URL.Contains( "localhost" ))
Все это не 100% -ные решения, но мне надоело размышлять над тем, что может быть простой собственностью, которой я не хватает. Я также прочитал этот, но, похоже, не имеет принятого ответа (и больше касается пути, а не авторитета). Поэтому я отношусь к вам, ребята.
Резюме
Итак, если у меня есть http://localhost:12345/login
, мне нужно получить http://localhost:12345/callback
из контекста Request.
И если бы у меня было http://sub.example.com/login", я должен получить " http://sub.example.com/callback", независимо от того, в каком порту он находится.
Спасибо! (Время сна, ответит на любые вопросы утром)