Scala 如何在Akka HTTP请求中访问请求的完整路径?

Scala 如何在Akka HTTP请求中访问请求的完整路径?,scala,akka-http,Scala,Akka Http,在某些上下文中,我可以使用PathDirective在剩余路径上进行匹配,以获取有关该路径的所需信息。例如,当下面的route直接绑定并由Akka HTTP处理时,每个请求都会根据需要回显请求的路径 val route = path(Remaining) { path => complete(path) } 但是,当上述路由在应用程序中的其他位置组合时,上面的path变量可能只保留请求路径的一部分,而不会给出期望的结果 例如,如果实际绑定的路由是be val actual

在某些上下文中,我可以使用PathDirective在剩余路径上进行匹配,以获取有关该路径的所需信息。例如,当下面的
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
指令得到的输出保持一致