【问题标题】:akka-http pathEnd directive catches query stringakka-http pathEnd 指令捕获查询字符串
【发布时间】:2016-07-26 14:55:50
【问题描述】:

根据 pathEnd 指令的文档:

如果 [[RequestContext]] 的 unmatchedPath 为 非空,或者说不同:只将请求传递给它的 如果请求路径已完全匹配,则为内部路由。

但是:

val route = pathPrefix("prefix") {
      get {
        pathEnd {
          complete(HttpEntity("test\n"))
        }
      }
    }

在路径“/prefix?something”或“/prefix?something=z”等上捕获 GET 请求...

这是正常行为吗?我怎样才能让它拒绝上面的示例路径?

谢谢

我正在使用 akka 2.4.4

【问题讨论】:

    标签: scala akka akka-http


    【解决方案1】:

    这是正常行为。查询字符串不是请求路径的一部分,因此不匹配。要拒绝这些请求,您可以显式检查参数集是否为空:

    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")
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-18
      • 1970-01-01
      • 2012-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-31
      相关资源
      最近更新 更多