Scala akka-http 评估 headers 并在成功时继续路由?
Scala akka-http evaluate headers and continue routing if successful?
我是 scala 的新手,我正在尝试弄清楚如何添加到我们现有的路由中,以便如果命中某个路径,我们通过检查来评估 headers某些值的存在以及它们是否等于某些公认的值。如果成功,我们从 header 中获取一些 String 并将其传递,否则我们不应该继续路由并且 return 一些失败。
/abc -> don't check headers
/abc/def -> check headers, return
pathPrefix("abc") {
path("def") { // want to ADD something here to check headers and send it into someMethod
get {
complete(HttpEntity(something.someMethod(someValue)))
}
} ~ path("gdi") {
get { ... etc}
}
}
任何想法或虚拟示例都会非常有帮助。我在这里看到一些指令从请求和 header (https://doc.akka.io/docs/akka-http/10.0.11/scala/http/routing-dsl/directives/header-directives/headerValue.html) 中获取内容,但我不明白如何以这种方式链接指令。
如果我有什么误解,请帮助澄清!谢谢
使用 headerValueByName
,查找特定的 header 并在未找到 header 时拒绝请求:
get {
headerValueByName("MyHeader") { headerVal =>
complete(HttpEntity(something.someMethod(headerVal)))
}
}
要验证 header 值是否存在:
get {
headerValueByName("MyHeader") { headerVal =>
if (isValid(headerVal)) // isValid is a custom method that you provide
complete(HttpEntity(something.someMethod(headerVal)))
else
complete((BadRequest, "The MyHeader value is invalid."))
}
}
上例中的 isValid
可能类似于:
def isValid(headerValue: String): Boolean = {
val acceptedValues = Set("burrito", "quesadilla", "taco")
acceptedValues.contains(headerValue.toLowerCase)
}
我是 scala 的新手,我正在尝试弄清楚如何添加到我们现有的路由中,以便如果命中某个路径,我们通过检查来评估 headers某些值的存在以及它们是否等于某些公认的值。如果成功,我们从 header 中获取一些 String 并将其传递,否则我们不应该继续路由并且 return 一些失败。
/abc -> don't check headers
/abc/def -> check headers, return
pathPrefix("abc") {
path("def") { // want to ADD something here to check headers and send it into someMethod
get {
complete(HttpEntity(something.someMethod(someValue)))
}
} ~ path("gdi") {
get { ... etc}
}
}
任何想法或虚拟示例都会非常有帮助。我在这里看到一些指令从请求和 header (https://doc.akka.io/docs/akka-http/10.0.11/scala/http/routing-dsl/directives/header-directives/headerValue.html) 中获取内容,但我不明白如何以这种方式链接指令。
如果我有什么误解,请帮助澄清!谢谢
使用 headerValueByName
,查找特定的 header 并在未找到 header 时拒绝请求:
get {
headerValueByName("MyHeader") { headerVal =>
complete(HttpEntity(something.someMethod(headerVal)))
}
}
要验证 header 值是否存在:
get {
headerValueByName("MyHeader") { headerVal =>
if (isValid(headerVal)) // isValid is a custom method that you provide
complete(HttpEntity(something.someMethod(headerVal)))
else
complete((BadRequest, "The MyHeader value is invalid."))
}
}
上例中的 isValid
可能类似于:
def isValid(headerValue: String): Boolean = {
val acceptedValues = Set("burrito", "quesadilla", "taco")
acceptedValues.contains(headerValue.toLowerCase)
}