akka-http pathEnd 指令捕获查询字符串
akka-http pathEnd directive catches query string
根据 pathEnd 指令的文档:
Rejects the request if the unmatchedPath of the [[RequestContext]] is
non-empty, or said differently: only passes on the request to its
inner route if the request path has been matched completely.
但是:
val route = pathPrefix("prefix") {
get {
pathEnd {
complete(HttpEntity("test\n"))
}
}
}
在路径“/prefix?something”或“/prefix?something=z”等路径上捕获 GET 请求...
这是正常行为吗?我怎样才能让它拒绝上面的示例路径?
谢谢
我正在使用 akka 2.4.4
这是正常现象。查询字符串不是请求路径的一部分,因此不匹配。要拒绝这些请求,您可以明确检查参数集是否为空:
val route =
pathPrefix("prefix") {
get {
pathEnd {
parameterSeq { params =>
validate(params.isEmpty, "Parameters must be empty") {
complete(HttpEntity("test\n"))
}
}
}
}
}
Get("/prefix") ~> route ~> check {
responseAs[String] shouldEqual "test\n"
}
Get("/prefix?something") ~> route ~> check {
rejection shouldEqual ValidationRejection("Parameters must be empty")
}
根据 pathEnd 指令的文档:
Rejects the request if the unmatchedPath of the [[RequestContext]] is non-empty, or said differently: only passes on the request to its inner route if the request path has been matched completely.
但是:
val route = pathPrefix("prefix") {
get {
pathEnd {
complete(HttpEntity("test\n"))
}
}
}
在路径“/prefix?something”或“/prefix?something=z”等路径上捕获 GET 请求...
这是正常行为吗?我怎样才能让它拒绝上面的示例路径?
谢谢
我正在使用 akka 2.4.4
这是正常现象。查询字符串不是请求路径的一部分,因此不匹配。要拒绝这些请求,您可以明确检查参数集是否为空:
val route =
pathPrefix("prefix") {
get {
pathEnd {
parameterSeq { params =>
validate(params.isEmpty, "Parameters must be empty") {
complete(HttpEntity("test\n"))
}
}
}
}
}
Get("/prefix") ~> route ~> check {
responseAs[String] shouldEqual "test\n"
}
Get("/prefix?something") ~> route ~> check {
rejection shouldEqual ValidationRejection("Parameters must be empty")
}