Skip to content
Server Plugin

DoubleReceive

必要相依性io.ktor:ktor-server-double-receive

程式碼範例 double-receive

原生伺服器
Ktor 支援 Kotlin/Native,可讓您在不使用額外執行階段或虛擬機的情況下執行伺服器。
支援:✅

DoubleReceive 外掛程式提供了多次接收請求主體的能力,且不會拋出 RequestAlreadyConsumedException 例外。 如果某個 外掛程式 已經耗盡了請求主體,導致您無法在路由處理常式中再次接收它,這個功能就會非常有用。 例如,您可以使用 DoubleReceive 透過 CallLogging 外掛程式記錄請求主體,然後在 post 路由處理常式 中再次接收該主體。

DoubleReceive 外掛程式使用的是實驗性 API,預計在未來的更新中可能會有所演進,並可能包含破壞性變更。

新增相依性

若要使用 DoubleReceive,您需要在組建指令碼中包含 ktor-server-double-receive 構件:

Kotlin
Groovy
XML

安裝 DoubleReceive

若要將 DoubleReceive 外掛程式安裝到應用程式,請將其傳遞給指定

模組
模組可讓您透過分組路由來結構化您的應用程式。
中的 install 函式。 下方的程式碼片段展示了如何安裝 DoubleReceive ...

  • ... 在 embeddedServer 函式呼叫內。
  • ... 在明確定義的 module 內,該模組是 Application 類別的擴充函式。
kotlin
kotlin

DoubleReceive 外掛程式也可以 安裝到特定路由。 如果您需要為不同的應用程式資源設定不同的 DoubleReceive 組態,這會非常有用。

安裝 DoubleReceive 後,您可以多次 接收請求主體,且每次調用都會回傳相同的執行個體。 例如,您可以使用 CallLogging 外掛程式啟用請求主體的記錄功能...

kotlin
install(CallLogging) {
    level = Level.TRACE
    format { call ->
        runBlocking {
            "Body: ${call.receiveText()}"
        }
    }
}

... 然後在路由處理常式中再次獲取請求主體。

kotlin
post("/") {
    val receivedText = call.receiveText()
    call.respondText("Text '$receivedText' is received")
}

您可以在此處找到完整的範例:double-receive

組態 DoubleReceive

在預設組態下,DoubleReceive 提供了將 接收請求主體 轉換為以下型別的能力:

預設情況下,DoubleReceive 不支援:

如果您不需要從同一個請求接收不同的型別,或者不需要接收串流或通道,請將 cacheRawRequest 屬性設定為 false

kotlin
install(DoubleReceive) {
    cacheRawRequest = false
}