Получить исходный URL-адрес без дополнительных -стандартный порт (C #)

Первый вопрос!


Среда

MVC, C #, AppHarbor.

Проблема

Я вызываю провайдера openid и генерирую абсолютный URL-адрес обратного вызова на основе домена.

На моем локальный компьютер, это отлично работает, если я нажму http: // localhost: 12345 / login

Request.Url; //gives me `http://localhost:12345/callback`

Однако в AppHarbor, где я развертываю, потому что они используют нестандартные порты, даже если я нажимаю на него в " http: // s ub.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 из контекста запроса .

И если бы у меня было « http://sub.example.com/login », я бы получил « http://sub.example.com/callback », независимо от того, на каком порту он находится.

Спасибо! (Время сна, утром отвечу на любые вопросы)

18
задан Community 23 May 2017 в 11:54
поделиться