试图在请求检查中错过HTTP method.get
和method.delete
。但它失败了。
func respond(to request: Request, chainingTo next: Responder) throws -> Response {
if request.method != .get || request.method != .delete {
guard let contentType = request.headers["Content-Type"], contentType == "application/json" else {
return try Response(status: .badRequest, json: JSON(node: ["reason": "Invalid data"]))
}
}
return try next.respond(to: request)
}
期待不允许.get
或.delete
通过。
目前的结果是,当.get
或.delete
显示invalid data
时,它会直接变为无效。看起来像是||运算符被忽略,我无法弄清楚原因。
您应该使用AND(&&
)运算符。通过编写当前代码的方式,可以遵循:
GET
请求来自客户端并进入respond
方法。if
声明。.get
。它是平等的,所以我们转向下一个案例。.delete
。它不相等,所以声明通过。if
语句中运行代码。如果任一语句为false,则使用&&
运算符将失败,而如果两个语句都为false,则||
运算符将失败。
if request.method != .get && request.method != .delete {
guard let contentType = request.headers["Content-Type"], contentType == "application/json" else {
return try Response(status: .badRequest, json: JSON(node: ["reason": "Invalid data"]))
}
}
注意:在.get
之后你不需要逗号。老实说,我不知道它做了什么,或者它是否有所作为。