如何在 Akka HTTP 请求中访问请求的完整路径?
How do I access the full path of a request in Akka HTTP request?
在某些情况下,我可以使用 PathDirective 在剩余路径上进行匹配,以获取我需要的有关路径的信息。例如,当下面的route
被Akka HTTP直接绑定和处理时,每个请求都会根据需要回显请求的路径。
val route =
path(Remaining) { path =>
complete(path)
}
但是,当上述路由在应用程序的其他地方组合时,上面的 path
变量可能只包含请求路径的一部分,而没有给出所需的结果。
例如实际绑定的路由是,
val actualRoute = pathPrefix("echo") { route }
给用户的响应中将缺少整个路径的 "echo/" 部分。
完整路径如何可靠访问?
Directives extractMatchedPath
and extractUnmatchedPath
允许您访问路径而不匹配上面的 path
指令所做的路径。这两个可以组合起来构造完整路径:
val route =
extractMatchedPath { matched =>
extractUnmatchedPath { unmatched =>
complete((matched.dropChars(1) ++ unmatched).toString)
}
}
然而,直接从 URI 中提取 Path
可能更简洁:
val route =
extractUri { uri =>
complete(uri.toRelative.path.dropChars(1).toString)
}
请注意,在这两种情况下,我们都需要调用 .dropChars(1)
来删除初始正斜杠并与使用 path
指令获得的输出一致。
在某些情况下,我可以使用 PathDirective 在剩余路径上进行匹配,以获取我需要的有关路径的信息。例如,当下面的route
被Akka HTTP直接绑定和处理时,每个请求都会根据需要回显请求的路径。
val route =
path(Remaining) { path =>
complete(path)
}
但是,当上述路由在应用程序的其他地方组合时,上面的 path
变量可能只包含请求路径的一部分,而没有给出所需的结果。
例如实际绑定的路由是,
val actualRoute = pathPrefix("echo") { route }
给用户的响应中将缺少整个路径的 "echo/" 部分。
完整路径如何可靠访问?
Directives extractMatchedPath
and extractUnmatchedPath
允许您访问路径而不匹配上面的 path
指令所做的路径。这两个可以组合起来构造完整路径:
val route =
extractMatchedPath { matched =>
extractUnmatchedPath { unmatched =>
complete((matched.dropChars(1) ++ unmatched).toString)
}
}
然而,直接从 URI 中提取 Path
可能更简洁:
val route =
extractUri { uri =>
complete(uri.toRelative.path.dropChars(1).toString)
}
请注意,在这两种情况下,我们都需要调用 .dropChars(1)
来删除初始正斜杠并与使用 path
指令获得的输出一致。