DoubleReceive
所需依賴項:io.ktor:ktor-server-double-receive
程式碼範例: double-receive
DoubleReceive 外掛提供多次接收請求主體的能力,且不會拋出 RequestAlreadyConsumedException
例外。如果某個外掛已經消耗了請求主體,導致您無法在路由處理器中接收它,這可能就很有用。例如,您可以使用 DoubleReceive
透過 CallLogging 外掛來記錄請求主體,然後在 post
路由處理器內部再次接收主體。
DoubleReceive
外掛使用實驗性 API,預計在未來的更新中會演進,並可能導致破壞性變更。
新增依賴項
若要使用 `DoubleReceive`,您需要在建置腳本中納入 `ktor-server-double-receive` artifact:
安裝 DoubleReceive
若要將 `DoubleReceive` 外掛[安裝](#install)到應用程式, 請將其傳遞給指定[模組](
- ... 在 `embeddedServer` 函式呼叫內。
- ... 在明確定義的 `module` 內,該 `module` 是 `Application` 類別的一個擴充函式。
`DoubleReceive` 外掛也可以[安裝](#install-route)到特定的路由。 如果您需要為不同的應用程式資源設定不同的 `DoubleReceive` 配置,這可能很有用。
安裝 DoubleReceive
後,您可以多次接收請求主體,並且每次呼叫都返回相同的實例。 例如,您可以使用 CallLogging 外掛啟用請求主體的日誌記錄...
install(CallLogging) {
level = Level.TRACE
format { call ->
runBlocking {
"Body: ${call.receiveText()}"
}
}
}
... 然後在路由處理器內部再次取得請求主體。
post("/") {
val receivedText = call.receiveText()
call.respondText("Text '$receivedText' is received")
}
您可以在此處找到完整範例:double-receive。
配置 DoubleReceive
在預設配置下,DoubleReceive
提供將請求主體接收為以下類型的能力:
ByteArray
String
Parameters
- 由
ContentNegotiation
外掛使用的資料類別
依預設,DoubleReceive
不支援:
- 從同一個請求接收不同類型;
- 接收流或通道。
如果您不需要從同一個請求接收不同類型,或不需要接收流或通道,請將 cacheRawRequest
屬性設定為 false
:
install(DoubleReceive) {
cacheRawRequest = false
}