You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rocket 0.5如何返回HTML内容?导入Html模块报错解决

问题原因

Rocket 0.5版本对响应内容相关API做了不兼容变更,你使用的是0.4版本的旧写法,直接编译必然报错:

  • 0.4版本用于包装HTML字符串的content::Html类型,在0.5版本中已重命名为RawHtml,所属模块路径仍为rocket::response::content
  • 代码中未导入content模块就直接以content::前缀调用类型,也会触发未声明模块的编译错误
正确实现方案

以下两种写法都可以在Rocket 0.5中正确返回HTML内容,按需选择即可:

方案1:使用RawHtml包装类型(与旧版使用逻辑一致)

完整可运行代码:

use rocket::*;
use rocket::response::content::RawHtml;

#[get("/")]
fn index() -> RawHtml<&'static str> {
    RawHtml(r#"
        <title>GCD Calculator</title>
        <form action="/gcd" method="post">
            <input type="text" name="n" />
            <input type="text" name="n" />
            <button type="submit">Compute GCD</button>
        </form>
    "#)
}

#[launch]
fn rocket() -> _ {
    rocket::build().mount("/", routes![index])
}

方案2:返回元组自动设置响应头

无需导入额外包装类型,直接返回(ContentType, 响应体)格式的元组,Rocket会自动将响应的Content-Type头设置为对应值:

use rocket::*;
use rocket::http::ContentType;

#[get("/")]
fn index() -> (ContentType, &'static str) {
    (ContentType::HTML, r#"
        <title>GCD Calculator</title>
        <form action="/gcd" method="post">
            <input type="text" name="n" />
            <input type="text" name="n" />
            <button type="submit">Compute GCD</button>
        </form>
    "#)
}

#[launch]
fn rocket() -> _ {
    rocket::build().mount("/", routes![index])
}

补充说明:如果需要返回动态生成的HTML内容,将返回值里的&'static str替换为对应生命周期的String类型即可,两种写法均支持动态字符串。


内容的提问来源于stack exchange,提问作者Gaurav Chandrashekar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 16:12:17