14

現在、ドメインとオプションのポートを含むリクエストからホストを取得できます。残念ながら、プロトコル(httpとhttps)が含まれていないため、サイト自体への絶対URLを作成できません。

object Application extends Controller {
  def index = Action { request =>
    Ok(request.host + "/some/path") // Returns "localhost:9000/some/path"
  }
}

リクエストオブジェクトからプロトコルを取得する方法はありますか?

4

5 に答える 5

11

実際には、リバースルーターが同様のことを実現するために使用するCallクラスを使用してそれを行う簡単な方法があります。暗黙のリクエストの範囲内にいるとすると、次のようなことができます。

new Call(request.method, input.request).absoluteURL()

完全なURL(プロトコル、ホスト、ルート、パラメーター)が提供されます。

于 2014-08-21T17:56:26.647 に答える
7

Play 2.3以降では、Requestクラスsecureプロパティを使用できます。

于 2014-09-07T10:32:52.540 に答える
4

ないと思います。

回避策は、を使用してプロトコル相対URLを使用することです//domain.com/path

ただし、これは電子メール内のリンクには役立ちません。その場合、プロトコルをに入れることができますapplication.conf。ほとんどの場合、本番環境はhttpsをサポートし、開発はサポートしないため、違いが生じます。

上記の回避策が機能しない状況はまだ見つかっていません。

于 2013-02-13T23:10:48.237 に答える
1

実際には、ポート番号はhttpまたはhttpsの場合に表示されます。

httpsサポートを使用してPlayサーバーを起動します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's thru http
https://ServerIp:9001/some/path if it's thru https
于 2013-02-14T13:03:50.273 に答える
0

私の解決策は、URLの先頭をjavascriptからの追加パラメーターとして渡すことでした。同じアプリケーションがhttpとhttpsでアクセス可能ですが、異なるサブネットとドメインからアクセスできるため、application.confソリューションは機能しません。

于 2014-03-14T11:13:16.527 に答える