我可以允许从 groovy-dsl 的所有来源删除吗?
Can I allow DELETE from all origins with groovy-dsl?
使用 Ratpack 脚本构建一个快速而肮脏的 REST API;无法弄清楚如何允许从所有来源删除。
我已经尝试在 delete
中设置 headers,并使用 all
(如示例代码中所示)。使用 curl、邮递员发送 DELETE,一切总是 returns 405.我是不是漏掉了一些简单的东西?
@Grapes([
@Grab('io.ratpack:ratpack-groovy:1.6.1')
])
ratpack {
handlers {
all {
MutableHeaders headers = response.headers
headers.set("Access-Control-Allow-Origin", "*")
headers.set("Access-Control-Allow-Methods", "GET, PUT, POST, DELETE")
next()
}
post("product") {
...
}
get("product/:id") {
...
}
delete("product/:productId") {
// always returns 405
...
}
}
}
您看到 HTTP/1.1 405 Method Not Allowed
响应状态,因为您的请求已由 get("product/:id")
处理程序处理。如果要为多个 HTTP 方法使用相同的路径,可以使用 prefix
结合 byMethod
方法为同一路径定义多个处理程序。
考虑以下示例:
import ratpack.http.MutableHeaders
import static ratpack.groovy.Groovy.ratpack
ratpack {
handlers {
all {
MutableHeaders headers = response.headers
headers.set("Access-Control-Allow-Origin", "*")
headers.set("Access-Control-Allow-Methods", "GET, PUT, POST, DELETE")
next()
}
prefix("product") {
post {
render("POST /product")
}
prefix(":id") {
path {
byMethod {
get {
render("GET /product/${allPathTokens.id}")
}
delete {
render("DELETE /product/${allPathTokens.id}")
}
}
}
}
}
}
}
如上例所示,可以嵌套前缀。我们可以使用以下 curl 请求对其进行测试:
$ curl -X POST http://localhost:5050/product
POST /product%
$ curl -X GET http://localhost:5050/product/test
GET /product/test%
$ curl -X DELETE http://localhost:5050/product/test
DELETE /product/test%
如果您对更多细节感兴趣,我前段时间写了一篇博客 post 有一个类似的例子 - https://e.printstacktrace.blog/using-the-same-prefix-with-different-http-methods-in-ratpack/
使用 Ratpack 脚本构建一个快速而肮脏的 REST API;无法弄清楚如何允许从所有来源删除。
我已经尝试在 delete
中设置 headers,并使用 all
(如示例代码中所示)。使用 curl、邮递员发送 DELETE,一切总是 returns 405.我是不是漏掉了一些简单的东西?
@Grapes([
@Grab('io.ratpack:ratpack-groovy:1.6.1')
])
ratpack {
handlers {
all {
MutableHeaders headers = response.headers
headers.set("Access-Control-Allow-Origin", "*")
headers.set("Access-Control-Allow-Methods", "GET, PUT, POST, DELETE")
next()
}
post("product") {
...
}
get("product/:id") {
...
}
delete("product/:productId") {
// always returns 405
...
}
}
}
您看到 HTTP/1.1 405 Method Not Allowed
响应状态,因为您的请求已由 get("product/:id")
处理程序处理。如果要为多个 HTTP 方法使用相同的路径,可以使用 prefix
结合 byMethod
方法为同一路径定义多个处理程序。
考虑以下示例:
import ratpack.http.MutableHeaders
import static ratpack.groovy.Groovy.ratpack
ratpack {
handlers {
all {
MutableHeaders headers = response.headers
headers.set("Access-Control-Allow-Origin", "*")
headers.set("Access-Control-Allow-Methods", "GET, PUT, POST, DELETE")
next()
}
prefix("product") {
post {
render("POST /product")
}
prefix(":id") {
path {
byMethod {
get {
render("GET /product/${allPathTokens.id}")
}
delete {
render("DELETE /product/${allPathTokens.id}")
}
}
}
}
}
}
}
如上例所示,可以嵌套前缀。我们可以使用以下 curl 请求对其进行测试:
$ curl -X POST http://localhost:5050/product
POST /product%
$ curl -X GET http://localhost:5050/product/test
GET /product/test%
$ curl -X DELETE http://localhost:5050/product/test
DELETE /product/test%
如果您对更多细节感兴趣,我前段时间写了一篇博客 post 有一个类似的例子 - https://e.printstacktrace.blog/using-the-same-prefix-with-different-http-methods-in-ratpack/