Kitura TypeSafeHTTPBasic auth在帖子正文中查找凭据?

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

我在Kitura有一个TypeSafe可编码路由定义如下:

app.router.post("/games") { (auth: BasicAuth, respondWith: @escaping (Game?, RequestError?) -> ()) in 
    ...
}

但是当我提出请求时,我会收到Could not decode received JSON: The required key 'id' not found.。这似乎是路由器试图从POST主体而不是从基本的auth头解析auth对象。如果我改变路由到GET它工作得很好,但我不太了解类型安全可编码路由,我很困惑POST路由改变了什么。如何让我的BasicAuth与POST一样工作与GET一样?

swift rest kitura
1个回答
2
投票

使用Kitura的Codable Routing时,POST处理程序期望从消息体接收Codable输入。您可以选择指定一个或多个TypeSafeMiddleware要求。

如果要执行POST,则需要匹配带有Codable和TypeSafeMiddleware作为输入的the post() function on Router

app.router.post("/games") { (auth: BasicAuth, input: MyInputType, respondWith: @escaping (Game?, RequestError?) -> ()) in 
    ...
}

在您的情况下发生的是您实际上匹配this post() function without TypeSafeMiddleware,其中您的auth类型(符合Codable)被解释为您的输入类型。

如果您不希望将有效负载PO​​ST到服务器以获取此请求,那么您可能需要的是GET,而是匹配仅将TypeSafeMiddleware作为输入的the get() function on Router

app.router.get("/games") { (auth: BasicAuth, respondWith: @escaping (Game?, RequestError?) -> ()) in 
    ...
}

请注意,TypeSafeMiddleware是路由处理程序的第一个参数,后跟任何其他输入类型(在PUT或POST的情况下)。

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