akka HttpHeader 可以存储 X-Request-ID 或 X-Correlation-ID 字段吗?
Can akka HttpHeader store an X-Request-ID or X-Correlation-ID Field?
我正在尝试 store/lookup X-Request-ID in an akka HttpRequest
but HttpHeader
似乎没有合适的子class。
是否可以访问 HttpHeader 中的 X-Request-ID 字段或 X-Correlation-ID 字段?
根据documentation,以下代码获取授权令牌:
import akka.http.scaladsl.model.headers._
case class User(name: String, pass: String)
// a method that extracts basic HTTP credentials from a request
def credentialsOfRequest(req: HttpRequest): Option[User] =
for {
Authorization(BasicHttpCredentials(user, pass)) <- req.header[Authorization]
} yield User(user, pass)
但是 headers
包没有 X-Request-ID 的对应案例 class。有 X-Forward-For
和 X-Real-Ip
也有 "Common non-standard request fields".
我发现 关于 "custom headers" 但我希望不必走那条路...
是否有使用自定义 headers 的替代方法?
提前感谢您的考虑和回复。
您可以实现一个Custom Header以获得您想要的功能,如下所示:
def requestIdOfRequest(req: HttpRequest): Option[String] =
for {
`X-Request-Id`(id) <- req.header[`X-Request-Id`]
} yield id
final class `X-Request-Id`(id: String) extends ModeledCustomHeader[`X-Request-Id`] {
override def renderInRequests = false
override def renderInResponses = false
override val companion = `X-Request-Id`
override def value: String = id
}
object `X-Request-Id` extends ModeledCustomHeaderCompanion[`X-Request-Id`] {
override val name = "X-Request-Id"
override def parse(value: String) = Try(new `X-Request-Id`(value))
}
我正在尝试 store/lookup X-Request-ID in an akka HttpRequest
but HttpHeader
似乎没有合适的子class。
是否可以访问 HttpHeader 中的 X-Request-ID 字段或 X-Correlation-ID 字段?
根据documentation,以下代码获取授权令牌:
import akka.http.scaladsl.model.headers._
case class User(name: String, pass: String)
// a method that extracts basic HTTP credentials from a request
def credentialsOfRequest(req: HttpRequest): Option[User] =
for {
Authorization(BasicHttpCredentials(user, pass)) <- req.header[Authorization]
} yield User(user, pass)
但是 headers
包没有 X-Request-ID 的对应案例 class。有 X-Forward-For
和 X-Real-Ip
也有 "Common non-standard request fields".
我发现
是否有使用自定义 headers 的替代方法?
提前感谢您的考虑和回复。
您可以实现一个Custom Header以获得您想要的功能,如下所示:
def requestIdOfRequest(req: HttpRequest): Option[String] =
for {
`X-Request-Id`(id) <- req.header[`X-Request-Id`]
} yield id
final class `X-Request-Id`(id: String) extends ModeledCustomHeader[`X-Request-Id`] {
override def renderInRequests = false
override def renderInResponses = false
override val companion = `X-Request-Id`
override def value: String = id
}
object `X-Request-Id` extends ModeledCustomHeaderCompanion[`X-Request-Id`] {
override val name = "X-Request-Id"
override def parse(value: String) = Try(new `X-Request-Id`(value))
}