Akka-http:如何从请求中获取自定义标头?

时间:2015-09-16 20:26:26

标签: akka spray akka-http

我将请求中的以下标头发送到我的akka​​-http api:"Content-type": "application/json""Accept": "application/json""AppId": "some_id"

我如何获得" AppId"我的akka​​-http路线中的自定义标题?

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

感谢。

2 个答案:

答案 0 :(得分:9)

您需要使用其中一个HeaderDirectivesHeaderDirectives docs)来提取标头。例如,如果它是自定义的,您可以使用headerValueByName生成标头的值,如果标头不存在则拒绝路由(如果标头是可选的,您可以使用{{1} }):

optionalHeaderValueByName

快乐的交易!

答案 1 :(得分: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的条件响应支持。