响应
2025年7月1日大约 2 分钟hyperlanewebrustusage-introductionresponse
提示
hyperlane
框架没有发送响应前通过 ctx
中 get_response
获取的只是响应的初始化实例,里面其实没有数据, 只有当用户发送响应时才会构建出完整 http
响应,此后再次 get_response
才能获取到响应内容。
提示
hyperlane
框架对 ctx
额外封装了子字段的方法,可以直接调用大部分子字段的 get
和 set
方法名称, 例如:调用 response
上的 get_status_code
方法。
调用规律
- 原
response
的get
方法的get
名称后加response
名称,中间使用_拼接。 - 原
response
的set
方法的set
名称后加response
名称,中间使用_拼接。
获取响应
获取 response
let response: Response = ctx.get_response().await;
获取响应版本
let version: ResponseVersion = ctx.get_response_version().await;
获取响应状态码
let status_code: ResponseStatusCode = ctx.get_response_status_code().await;
获取响应原因短语
let reason_phrase: ResponseReasonPhrase = ctx.get_response_reason_phrase().await;
获取完整响应头
let headers: ResponseHeaders = ctx.get_response_headers().await;
获取某个响应头
let value: ResponseHeadersValue = ctx.get_response_header("key").await;
获取请求体
let body: ResponseBody = ctx.get_response_body().await;
获取 string
格式的请求体
let body: String = ctx.get_response_body_string().await;
获取 json
格式的请求体
let body: T = ctx.get_response_body_json::<T>().await;
设置响应
设置 response
ctx.set_response(Response::default()).await;
设置响应体
ctx.set_response_body(vec![]).await;
设置响应头
提示
hyperlane
框架对响应头的 key
是不做大小写处理的,这点与请求头的 key
处理方式不同。
ctx.set_response_header("server", "hyperlane").await;
设置状态码
ctx.set_response_status_code(200).await;
发送完整 HTTP 响应
提示
如果你已经设置了响应信息,可以直接通过 send
或者 send_once
发送。此方法内部兼容了SSE
和 Websocket
等协议,常用于响应中间件用于统一发送。
ctx.send
提示
发送响应后 TCP
连接保留。
let send_res: ResponseResult = ctx.set_body("hello").send().await;
ctx.send_once
提示
发送响应后 TCP
连接立即关闭。
let send_res: ResponseResult = ctx.set_body("hello").send_once().await;
仅发送响应体
提示
支持多次主动发送响应。
response.send_body
提示
发送响应体后 TCP
连接保留。
let send_res: ResponseResult = ctx.set_body("hello").send_body().await;
response.send_once_body
提示
发送响应体后 TCP
连接立即关闭。
let send_res: ResponseResult = ctx.set_body("hello").send_once_body().await;