Scala 如何在Akka HTTP请求中访问请求的完整路径?
在某些上下文中,我可以使用PathDirective在剩余路径上进行匹配,以获取有关该路径的所需信息。例如,当下面的Scala 如何在Akka HTTP请求中访问请求的完整路径?,scala,akka-http,Scala,Akka Http,在某些上下文中,我可以使用PathDirective在剩余路径上进行匹配,以获取有关该路径的所需信息。例如,当下面的route直接绑定并由Akka HTTP处理时,每个请求都会根据需要回显请求的路径 val route = path(Remaining) { path => complete(path) } 但是,当上述路由在应用程序中的其他位置组合时,上面的path变量可能只保留请求路径的一部分,而不会给出期望的结果 例如,如果实际绑定的路由是be val actual
route
直接绑定并由Akka HTTP处理时,每个请求都会根据需要回显请求的路径
val route =
path(Remaining) { path =>
complete(path)
}
但是,当上述路由在应用程序中的其他位置组合时,上面的path
变量可能只保留请求路径的一部分,而不会给出期望的结果
例如,如果实际绑定的路由是be
val actualRoute = pathPrefix("echo") { route }
提供给用户的响应中将缺少整个路径的“echo/”部分
如何可靠地访问完整路径?让您访问路径,而不匹配上面所述的路径。这两种方法可以结合起来构成完整的路径:
val route =
extractMatchedPath { matched =>
extractUnmatchedPath { unmatched =>
complete((matched.dropChars(1) ++ unmatched).toString)
}
}
但是,直接从URI中提取路径可能更干净:
val route =
extractUri { uri =>
complete(uri.toRelative.path.dropChars(1).toString)
}
请注意,在这两种情况下,我们都需要调用.dropChars(1)
来删除初始正斜杠,并与使用path
指令得到的输出保持一致