我正在使用 rust Rocket 框架制作一个非常简单的 Web 应用程序。我有一个非常简单的 HTML 文件,它有一个表单,如下所示:
<form action="/search" method="post" accept-charset="utf-8">
Search Term:<input type="text" name="searchterm">
<input type="submit" value="search">
</form>
接下来,这是我处理请求的火箭函数。我有一个 get 函数,在访问“/”时会吐出 index.html,然后对于我的表单,我有以下函数:
#[derive(FromForm)]
pub struct Request<'r> {
payload: &'r RawStr,
//we can add more if we want later on, for other form options...
}
#[post("/search", data = "<data>")]
pub fn process(data: Form<Request>) -> Result<Redirect, String> {
if data.payload == "Hello!" {
Ok(Redirect::to("/search/Hello"))
} else {
Err(format!("Unknown search term, '{}'.", data.payload))
}
}
然后,这是响应 GET 请求:
#[get("/search/<term>")]
pub fn response(term: &RawStr) -> String {
format!("You typed in {}.", term)
}
就像我说的,非常简单,非常准系统,只是试图同时蹑手蹑脚地进入 Rust 和 Web 应用程序。我在这两个方面都没有太多经验。我的问题是,在我的 html 文件中使用呈现给用户的字段时,服务器返回错误:
POST /search application/x-www-form-urlencoded:
=> Matched: POST /search (process)
=> Error: The incoming form failed to parse.
=> Outcome: Failure
=> Warning: Responding with 422 Unprocessable Entity catcher.
=> Response succeeded.
如果我直接去,“localhost:8000/search/Hello!” 我可以看到我的 GET 响应有效。但是,如果我使用我的表单,它会拒绝解析。我究竟做错了什么?我只是在尝试制作一个接受输入并基于该输入返回某些内容的 Web 应用程序。网站重定向,网页抓取,我还不确定功能的细节,但我需要能够在表单中输入一些内容并获取它以供以后在我的 rust 代码中使用。任何帮助,将不胜感激!