我正在使用Rust Rocket框架生成一个简单的网页.
当去索引页面"/"时:
#[get("/")]
fn page_index() -> &'static str {
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>
"#
}
Run Code Online (Sandbox Code Playgroud)
服务器控制台告诉我
GET / text/html:
=> Matched: GET /
=> Outcome: Success
=> Response succeeded.
Run Code Online (Sandbox Code Playgroud)
但是我的浏览器告诉我Content-Type是text/plain.
如何使Rocket正确响应text/html.我做错了什么还是Rocket?
在关于引导反应说明了如何设置响应的内容类型.特别是,您需要rocket::response::content::Html:
use rocket::response::content::Html;
#[get("/")]
fn page_index() -> Html<&'static str> {
Html(r"<html>...</html>")
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果要将Content-Type设置为"text/html",则实际上必须返回HTML文档.您在示例代码中发布的内容只是HTML的一个片段.实际上,将HTML放入静态foo.html文件并使用NamedFile它直接提供(自动设置Content-Type)或使用模板要容易得多.
默认情况下,Rocket 将使用 text/plain 进行响应,因此您必须使用它提供的内容模块覆盖它。
您可以这样使用Html响应器:
use rocket::response::content;
#[get("/")]
fn page_index() -> content::Html<&'static str> {
content::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>
"#)
}
Run Code Online (Sandbox Code Playgroud)