为何Axum处理器返回&'static str可显示,print!/format!却无法在网页输出?
Axum路由无内容返回的原因与解决办法
问题本质
Axum的路由处理函数必须返回可转换为HTTP响应的类型:
root函数返回&'static str时,Axum会自动将其包装成带200状态码、文本响应体的HTTP响应,浏览器能正常解析并显示内容。avi函数无返回值(等价于返回()),Axum对()的默认处理是返回204 No Content响应——这类响应没有响应体,所以浏览器页面显示空白。另外,print!是向服务器控制台输出内容,和发送给客户端的HTTP响应完全无关,客户端根本拿不到这部分内容。
解决办法
要让客户端收到内容,需让路由函数返回可生成有效响应的类型,比如:
- 返回静态字符串(最简单的方式):
async fn avi() -> &'static str { "Functional call is avi" }
- 返回动态生成的字符串:
async fn avi() -> String { let content = "Functional call is avi".to_string(); // 若需要在服务器控制台打印,单独用println! println!("{}", content); content }
- 如需更复杂的响应(比如HTML、JSON),可以使用Axum提供的响应类型,如
axum::response::Html:
use axum::response::Html; async fn avi() -> Html<&'static str> { Html("<h1>Functional call is avi</h1>") }
内容的提问来源于stack exchange,提问作者Aviral Srivastava
相关产品推荐
相关产品推荐

