Play Framework 2.1: Scala: как получить весь базовый url (включая протокол)?
В настоящее время я могу получить хост от request, который включает в себя домен и дополнительный порт. К сожалению, он не включает протокол (http vs https), поэтому я не могу создать абсолютные URL-адреса для самого сайта.
object Application extends Controller {
def index = Action { request =>
Ok(request.host + "/some/path") // Returns "localhost:9000/some/path"
}
}
Есть ли способ получить протокол от объекта запроса?
Ответы
Ответ 1
Фактически ваш номер порта даст вам, если он http или https.
Запустите свой сервер воспроизведения с поддержкой https JAVA_OPTS=-Dhttps.port=9001 play start
Здесь фрагмент кода (вы можете сделать проверку более стабильной с регулярным выражением, взять номер порта https из свойств...)
def path = Action { request =>
val path =
if(request.host.contains(":9000"))
"http://" + request.host + "/some/path"
else
"https://" + request.host + "/some/path"
Ok(path)
}
Код вернет
http://ServerIp:9000/some/path if it thru http
https://ServerIp:9001/some/path if it thru https
Ответ 2
На самом деле есть простой способ сделать это, используя класс Call, который использует обратные маршрутизаторы для достижения аналогичной вещи.
Учитывая, что вы находитесь в рамках неявного запроса, вы можете сделать что-то вроде этого:
new Call(request.method, input.request).absoluteURL()
и он предоставит вам полный URL-адрес (протокол, хост, маршрут и параметры).
Ответ 3
В Play 2.3 и более поздних версиях вы можете использовать свойство secure
класса Request.
Ответ 4
Я не думаю, что есть.
Обходным путем является использование относительных URL-адресов с помощью //domain.com/path
.
Это, однако, не поможет вам со ссылками по электронной почте. В этом случае вы можете поместить протокол в application.conf
. В большинстве случаев разница заключается в том, что производство поддерживает https, а разработка - нет.
Мне еще не найти ситуацию, когда вышеупомянутые обходные пути не работают.
Ответ 5
Моим решением было передать начало URL-адреса в качестве дополнительного параметра из javascript.
Решение application.conf не работает для меня, потому что одно и то же приложение доступно на http и https, но из разных подсети и домена.