gpt4 book ai didi

groovy - 在 Ratpack 中使用 `prefix {}` 方法而不是 `all { byMethod { } }` 会导致 405 方法不允许 - 怎么了?

转载 作者:行者123 更新时间:2023-12-04 14:20:38 24 4
gpt4 key购买 nike

刚开始看《Learn Ratpack》,书一开始就有一个例子,作者用'all', 'byMethod', 'get' and 'post'来举例说明如何解析请求数据,他的工作方式,但我尝试使用“前缀”、“获取”和“发布”,但我无法获得相同的结果,它返回 405-Method Not Allowed。

我试图在文档中找到一些东西,但我不明白为什么带有“前缀”的行为。

示例版本

import static ratpack.groovy.Groovy.ratpack
import ratpack.form.Form

ratpack {
handlers {
all {
byMethod {
get {
//In the exemple he sends a html form
}
post {
//And here he parses it.
}
}
}
}
}

405版本

import static ratpack.groovy.Groovy.ratpack
import ratpack.form.Form

ratpack {
handlers {
prefix("parsing-request-data") {
get{
//From here all the same

就是这样,我错过了什么?

最佳答案

如果您想对同一个相对路径使用多个不同的 HTTP 方法,您仍然需要使用 byMethod {} 方法创建此类处理程序。否则,链中与相对路径匹配的第一个处理程序将处理请求,它可能会失败或成功。 (在您的情况下,POST 请求因 405 Method Not Allowed 而失败,因为 get 处理程序处理了该请求,并且它在请求中发现了不正确的 HTTP 方法。如果您希望希望看到 GET 请求失败而不是 POST 请求 - 重新排序方法,因此 post {} 是链中的第一个处理程序。)

byMethod {} 方法允许为同一相对路径注册多个处理程序,这些处理程序将根据请求的 HTTP 方法进行解析。如果使用 prefix{} 方法,您可以在 path {} 辅助方法中访问 byMethod{} 方法:

import static ratpack.groovy.Groovy.ratpack

ratpack {

handlers {

prefix("parsing-request-data") {
path {
byMethod {
post {
response.send("A response returned from POST /parsing-request-data\n ")
}

get {
response.send("A response returned from GET /parsing-request-data\n")
}
}
}

get("test") {
response.send("A response returned from GET /parsing-request-data/test\n")
}
}
}
}

还有一些 curl 命令来测试它:

$ curl -i -X GET http://localhost:5050/parsing-request-data    
HTTP/1.1 200 OK
content-type: text/plain;charset=UTF-8
content-length: 51

A response returned from GET /parsing-request-data

$ curl -i -X POST http://localhost:5050/parsing-request-data
HTTP/1.1 200 OK
content-type: text/plain;charset=UTF-8
content-length: 53

A response returned from POST /parsing-request-data

$ curl -i -X GET http://localhost:5050/parsing-request-data/test
HTTP/1.1 200 OK
content-type: text/plain;charset=UTF-8
content-length: 56

A response returned from GET /parsing-request-data/test

关于groovy - 在 Ratpack 中使用 `prefix {}` 方法而不是 `all { byMethod { } }` 会导致 405 方法不允许 - 怎么了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55443010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com