响应
2025年8月17日大约 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: OptionResponseHeadersValue = ctx.get_response_header(CONTENT_TYPE).await;
获取响应头的第一个值
let header_value: OptionResponseHeadersValueItem = ctx.get_response_header_front(CONTENT_TYPE).await;
获取响应头的最后一个值
let header_value: OptionResponseHeadersValueItem = ctx.get_response_header_back(CONTENT_TYPE).await;
检查是否存在特定响应头
let has_header: bool = ctx.get_response_has_header(CONTENT_TYPE).await;
检查响应头是否包含特定值
let has_value: bool = ctx.has_response_header_value(CONTENT_TYPE, APPLICATION_JSON).await;
获取响应头数量
let headers_count: usize = ctx.get_response_headers_length().await;
获取响应头值的数量
let header_count: usize = ctx.get_response_header_len(CONTENT_TYPE).await;
获取所有响应头值的总数量
let total_values: usize = ctx.get_response_headers_values_length().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;
获取响应 Cookie
let cookies: Cookies = ctx.get_response_cookies().await;
获取特定响应 Cookie
let cookie_value: OptionCookiesValue = ctx.get_response_cookie("session_id").await;
设置响应
设置 response
ctx.set_response(Response::default()).await;
设置响应版本
注意
特别注意的是需要设置响应版本,框架默认的版本是空字符串,客户端处理会异常。
ctx.set_response_version(HttpVersion::HTTP1_1).await;
设置响应状态码
ctx.set_response_status_code(200).await;
设置响应原因短语
ctx.set_response_reason_phrase("OK").await;
设置响应体
ctx.set_response_body("Hello World").await;
设置(添加)响应头
提示
hyperlane
框架对响应头的 key
是不做大小写处理的,建议使用框架定义的常量。
ctx.add_response_header(SERVER, "hyperlane").await;
设置(替换)响应头
ctx.set_response_header(CONTENT_TYPE, APPLICATION_JSON).await;
移除响应头
ctx.remove_response_header(CONTENT_TYPE).await;
移除响应头的特定值
ctx.remove_response_header_value(CONTENT_TYPE, APPLICATION_JSON).await;
清空所有响应头
ctx.clear_response_headers().await;
执行闭包操作
使用响应执行异步闭包
let result = ctx.with_response(|response| async move {
response.get_status_code()
}).await;
转字符串
通过 to_string
提示
将获得完整的原始结构体字符串结构。
ctx.get_response().await.to_string();
通过 get_string
提示
将获得简化的结构体字符串结构。
ctx.get_response().await.get_string();
通过 ctx.get_response_string
let response_string: String = ctx.get_response_string().await;