在 Handler
中,Response
會被作為參數傳入:
Response
結構體封裝了 HTTP 響應的所有組成部分,提供了一套完整的 API 來構建和操作 HTTP 響應res.status_code(200).body("Hello")
),便於流暢地構建響應&mut self
返回自身引用,使得處理程式能夠方便地構建和定制 HTTP 響應,滿足各種 Web 服務需求Response
在伺服器接收到客戶端請求後,任何匹配到的 Handler
和中間件都可以向裡面寫入資料。在某些情況下,比如某個中間件希望阻止後續的中間件和 Handler
執行,您可以使用 FlowCtrl
:
向 Response
中寫入資料是非常簡單的:
寫入純文字資料
寫入 JSON 序列化資料
如果多次呼叫 render
方法寫入 JSON 資料,這些資料不會被合併成一個 JSON 物件,而是作為獨立的文字片段按順序拼接在一起,可能導致無效的 JSON 格式。如果需要返回多個資料,應該將它們組合成一個物件後再一次序列化,或自行處理邏輯。
寫入 HTML
使用 render
可以向 Response
寫入詳細錯誤資訊。
如果您不需要自訂錯誤資訊,可以直接呼叫 set_http_code
。
render
方法可以向 Response
寫入一個重新導向響應,導航到一個新的URL。當你呼叫 Redirect::found 方法時,它會設定 HTTP 狀態碼為 302(Found),表示臨時重新導向。
Response 返回的 Body 類型是 ResBody
,它是一個枚舉,在出錯時被設定為 ResBody::Error
,這裡包含錯誤的資訊,用於延後處理錯誤,StatusError
實際上並沒實現 Writer
,目的是讓您可以在 Catcher
中自訂自己的顯示方式。
類別 | 方法 | 描述 |
---|---|---|
建立 | new() / with_cookies() | 建立新響應 |
狀態碼 | status_code() | 設定狀態碼 |
請求標頭 | headers()/headers_mut() | 取得請求標頭 |
set_headers()/add_header() | 設定/新增請求標頭 | |
content_type() | 取得內容類型 | |
HTTP 版本 | version()/version_mut() | 取得/修改 HTTP 版本 |
響應體 | body()/body_mut() | 設定/取得響應體 |
replace_body()/take_body() | 替換/提取響應體 | |
write_body() | 寫入資料到響應體 | |
stream()/channel() | 串流響應/建立發送通道 | |
Cookie 處理 | cookies()/cookie() | 取得 cookies/指定 cookie |
add_cookie()/remove_cookie() | 新增/移除 cookie | |
內容響應 | render() | 渲染內容 |
stuff() | 設定狀態碼並渲染內容 | |
send_file() | 發送檔案 | |
狀態查詢 | is_stamped() | 檢查響應是否準備好寫回 |