Response
在 Handler 中,Response 會被作為參數傳入:
Response結構體封裝了 HTTP 響應的所有組成部分,提供了一套完整的 API 來建構和操作 HTTP 響應- 支援鏈式呼叫風格(如
res.status_code(200).body("Hello")),便於流暢地建構響應 - 核心功能包括:
- 設定狀態碼和請求標頭
- 操作響應體(支援字串、位元組、檔案和串流資料)
- 管理 Cookie
- 多種內容渲染方式
- 該結構體採用可變引用模式,透過
&mut self返回自身引用,使得處理程式能夠方便地建構和自訂 HTTP 響應,滿足各種 Web 服務需求
Response 在伺服器接收到客戶端請求後,任何匹配到的 Handler 和中間件都可以向裡面寫入資料。在某些情況下,比如某個中間件希望阻止後續的中間件和 Handler 執行,您可以使用 FlowCtrl:
寫入內容
向 Response 中寫入資料是非常簡單的:
-
寫入純文字資料
-
寫入 JSON 序列化資料
Warning
如果多次呼叫 render 方法寫入 JSON 資料,這些資料不會被合併成一個 JSON 物件,而是作為獨立的文字片段按順序拼接在一起,可能導致無效的 JSON 格式。如果需要返回多個資料,應該將它們組合成一個物件後再一次性序列化,或自行處理邏輯。
-
寫入 HTML
寫入 HTTP 錯誤
-
使用
render可以向Response寫入詳細錯誤資訊。 -
如果您不需要自訂錯誤資訊,可以直接呼叫
set_http_code。
重新導向到其他URL
- 使用
render方法可以向Response寫入一個重新導向響應,導航到一個新的URL。當你呼叫 Redirect::found 方法時,它會設定 HTTP 狀態碼為 302(Found),表示臨時重新導向。
ResBody
Response 返回的 Body 類型是 ResBody,它是一個列舉,在出錯時被設定為 ResBody::Error ,這裡包含錯誤的資訊,用於延後處理錯誤,StatusError 實際上並沒實作 Writer,目的是讓您可以在 Catcher 中自訂自己的顯示方式。