4

akka-http API へのリクエストで次のヘッダーを送信します: "Content-type": "application/json", "Accept": "application/json", "AppId": "some_id".

akka-http ルートで "AppId" カスタム ヘッダーを取得するにはどうすればよいですか?

(get & parameters("id")) { (id) =>
      complete {
        val appId = ?? // I want to get custom header here.
      }
    } 

ありがとう。

4

2 に答える 2

10

ヘッダーを抽出するには、 HeaderDirectives( HeaderDirectives docs )のいずれかを使用する必要があります。たとえば、カスタムの場合、ヘッダーの値を生成するheaderValueByNameを使用でき、ヘッダーが存在しない場合はルートを拒否します (ヘッダーがオプションの場合は を使用できますoptionalHeaderValueByName)。

headerValueByName("AppId") { appId =>
  complete(s"The AppId was: $appId")
}

ハッピーハッキング!

于 2015-09-16T22:25:34.803 に答える
6

私は実際には、認証トークン、アプリ ID、およびクライアントの要求を処理するために必須のその他のパラメーターなどのカスタム ディレクティブを作成することを好みます。あなたの場合、それはこのように見えるかもしれません

val extractAppId = (headerValueByName("AppId") | headerValueByName("AppId2")).tflatMap[Tuple1[String]] {
  case Tuple1(appId) =>
    if (!appId.equalsIgnoreCase("BannedAppId"))
      provide(appId)
    else
      complete(StatusCodes.Forbidden -> "Your application is banned")
}.recover {
  case rejections => reject(ValidationRejection("AppId is not provided"))
}

のように使用されます

extractAppId { appId =>
 get {
  complete {
   "Your AppId is " + appId
  }
 }
}

私の例をより興味深いものにするために、提供された AppId に基づく条件付き応答のサポートを追加しました。

于 2015-10-30T11:41:30.667 に答える