Vapor 2 OR条件不适用于请求类型检查

问题描述 投票:0回答:1

试图在请求检查中错过HTTP method.getmethod.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时,它会直接变为无效。看起来像是||运算符被忽略,我无法弄清楚原因。

swift logical-operators vapor
1个回答
0
投票

您应该使用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之后你不需要逗号。老实说,我不知道它做了什么,或者它是否有所作为。

© www.soinside.com 2019 - 2024. All rights reserved.