post - 如何修复 Rocket 中表单 POST 请求的解析错误?

标签 post rust web-applications rust-rocket

我正在使用 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 响应有效。但如果我使用我的表单,它会拒绝解析。我究竟做错了什么?我只是试图制作一个网络应用程序,它接受输入,并根据该输入返回一些内容。网站重定向、网络抓取,我还不确定功能的具体细节,但我需要能够在表单中输入一些内容并获取它以便稍后在我的 Rust 代码中使用。任何帮助将不胜感激!

最佳答案

我认为问题是您的表单参数名称( <input type="text" name="searchterm"> )与您的结构字段名称( payload )不匹配。如果您重命名其中一个或另一个以使它们匹配,您的表单应该可以工作。

关于post - 如何修复 Rocket 中表单 POST 请求的解析错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56204303/

相关文章:

web-services - 如何使用 QNetworkAccessManager 将数据发布到 url

PHP插入Mysql失败(自增)

multithreading - 多个线程如何共享一个迭代器?

rust - 具有多个生命周期的迭代器

hashmap - 如何将 HashMap 传递给 Rust 中的函数

ssl - 没有 Internet 连接的 WiFi 连接设备的最佳实践

javascript - 如何在flask中处理请求json数据

tomcat - 多个 Https Tomcat 连接器,一个需要客户端身份验证,一个不需要

java.util.concurrent.ExecutionException : org. apache.catalina.LifecycleException 异常

android - 如何 : pass a username and password back into a webview securely