首页 > 解决方案 > 无法在 GET 请求中访问表单数据

问题描述

我一直在尝试向 ktor 路由中定义的端点发出 GET 请求,但无论我如何尝试获取参数,这些参数似乎都丢失了。根据文档,我应该能够调用call.receive<Parameters>()并且应该会产生一个包含数据的地图,但它总是空的。

到目前为止,我已经尝试安装我自己的 ContentNegotiator (convertForReceive从不调用该方法),访问 queryParams (也始终为空),并使用call.receiveParameters()始终为空的方法

我的 CURL 请求看起来像

curl -X GET \
  http://localhost:7802/api/v2/plans \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode "id[starts_with]=asdf"

我的端点看起来像

fun Routing.plans() {
  route("plans") {
    get("") {
      val params = call.receive<Parameters>()
      println(params)
      call.respond(HttpStatusCode.NoContent)
    }
  }
}

我希望参数包含一些东西,但它们总是空的。

标签: kotlinktor

解决方案


我认为您将无法使用带有GET请求的主体。使用该 HTTP 动词,大多数服务器无法识别正文。如果您想发送正文,我建议您尝试将您的GET请求更改为POST.

我认为这应该能让你到达你需要去的地方。


推荐阅读