看起来他们删除了该query
功能并且只有一个query_string
功能。您可以为此使用一个名为qstring的板条箱:
use qstring::QString;
...
let query_str = req.query_string(); // "name=ferret"
let qs = QString::from(query_str);
let name = qs.get("name").unwrap(); // "ferret"
您还可以使用提取器将查询参数反序列化为带有 Serde 的结构
use serde::Deserialize;
#[derive(Deserialize)]
struct Info {
username: String,
}
fn index(info: web::Query<Info>) -> Result<String, actix_web::Error> {
Ok(format!("Welcome {}!", info.username))
}
username
请注意,只有在请求中实际存在查询时才会调用处理程序。这将调用处理程序:
curl "http://localhost:5000?username=joe"
但这些不会:
curl "http://localhost:5000"
curl "http://localhost:5000?password=blah"
如果您需要可选参数,只需在 struct 中创建属性Option
。
username: Option<String>
您还可以web::Query<SomeType>
在处理程序中使用多个参数。