我正在使用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 Apps。我在这两个方面都没有太多经验。我的问题是,使用我的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.
如果我直接进入“本地主机:8000 / search / Hello!”我可以看到我的GET响应有效。但是,如果我使用表格,它将拒绝解析。我究竟做错了什么?我只是试图制作一个接受输入的Web应用程序,然后根据该输入返回一些信息。网站重定向,网页抓取,我还不确定功能的具体细节,但是我需要能够在表单中输入一些内容,并稍后将其用于我的rust代码中。任何帮助将不胜感激!
答案 0 :(得分:0)
我认为问题在于您的表单参数名称(<input type="text" name="searchterm">
)与结构字段名称(payload
)不匹配。如果您将一个或另一个重命名为匹配名称,则您的表单应该可以使用。