使用 actix-web 从 HTML 页面捕获 GET & POST 请求
Catch GET & POST requests from HTML page using actix-web
我在提交 HTML 表单时收到一条错误消息,以便在 FORM 中捕获请求的详细信息(我正在使用 actix-web)。
当我提交表格时,出现此错误:
Content type error
使用的代码:
#[derive(Deserialize)]
struct FormData {
paire: String,
}
fn showit(form: web::Form<FormData>) -> String {
println!("Value to show: {}", form.paire);
form.paire.clone()
}
....
.service(
web::resource("/")
.route(web::get().to(showit))
.route(web::head().to(|| HttpResponse::MethodNotAllowed()))
))
HTML 使用的形式:
<form action="http://127.0.0.1:8080/" method="get">
<input type="text" name="paire" value="Example of value to show">
<input type="submit">
预期结果将是:
Example of value to show
与 mentioned in code comments in the documentation 一样,FormData 反序列化仅适用于 Post/x-www-form-urlencoded 个请求(目前):
/// extract form data using serde
/// this handler gets called only if the content type is *x-www-form-urlencoded*
/// and the content of the request could be deserialized to a `FormData` struct
fn index(form: web::Form<FormData>) -> Result<String> {
Ok(format!("Welcome {}!", form.username))
}
所以你有两个解决方案:
1) 将您的表格更改为 post/x-www-form-urlencoded 表格。这在您的示例中很容易,但在实际应用程序中并不总是可行
2) 使用另一种形式的数据提取(还有其他几种提取器)
我也有这个问题,把web::Form
改成web::Query
就解决了。
- 对于
POST
个请求,则使用 web::Form。
- 对于
GET
个请求,则使用 web::Query。
#[derive(Deserialize)]
struct FormData {
username: String,
}
fn get_user_detail_as_plaintext(form: web::Query<FormData>) -> Result<String> {
Ok(format!("User: {}!", form.username))
}
我在提交 HTML 表单时收到一条错误消息,以便在 FORM 中捕获请求的详细信息(我正在使用 actix-web)。
当我提交表格时,出现此错误:
Content type error
使用的代码:
#[derive(Deserialize)]
struct FormData {
paire: String,
}
fn showit(form: web::Form<FormData>) -> String {
println!("Value to show: {}", form.paire);
form.paire.clone()
}
....
.service(
web::resource("/")
.route(web::get().to(showit))
.route(web::head().to(|| HttpResponse::MethodNotAllowed()))
))
HTML 使用的形式:
<form action="http://127.0.0.1:8080/" method="get">
<input type="text" name="paire" value="Example of value to show">
<input type="submit">
预期结果将是:
Example of value to show
与 mentioned in code comments in the documentation 一样,FormData 反序列化仅适用于 Post/x-www-form-urlencoded 个请求(目前):
/// extract form data using serde
/// this handler gets called only if the content type is *x-www-form-urlencoded*
/// and the content of the request could be deserialized to a `FormData` struct
fn index(form: web::Form<FormData>) -> Result<String> {
Ok(format!("Welcome {}!", form.username))
}
所以你有两个解决方案:
1) 将您的表格更改为 post/x-www-form-urlencoded 表格。这在您的示例中很容易,但在实际应用程序中并不总是可行
2) 使用另一种形式的数据提取(还有其他几种提取器)
我也有这个问题,把web::Form
改成web::Query
就解决了。
- 对于
POST
个请求,则使用 web::Form。 - 对于
GET
个请求,则使用 web::Query。
#[derive(Deserialize)]
struct FormData {
username: String,
}
fn get_user_detail_as_plaintext(form: web::Query<FormData>) -> Result<String> {
Ok(format!("User: {}!", form.username))
}