如何获取URL参数?



下面的代码有问题(我是Rust的新手…):

let function = move |req: &mut Request| -> IronResult<Response> {
let router = req.extensions.get::<Router>().expect("Unable to get router");
println!("router:{:?}", router);
let val = router.find("param").expect("param is required");
...
}
...
router.get("/page", function, "handler");
...

当执行(site/page?param=0)时,得到以下跟踪。看起来router是空的。怎么了?

router:Params { map: {} }
thread '<unnamed>' panicked at 'param is required', src/main.rs:xx:xx

所以,我决定使用params::{Params},几乎达到了我的目标,但是…

let function = move |req: &mut Request| -> IronResult<Response> {
use params::{Params};
use crate::iron::Plugin;
let map = req.get_ref::<Params>().unwrap();
let val1 = map.find(&["param1"]).expect("param1 is required");
let val2 = map.find(&["param2"]).expect("param2 is required");
let cmd = format!("cmd={:?}{:?}n", val1, val2);
println!("{}", cmd);
...
};

我得到cmd="1600","100"而不是想要的cmd=1600,100。由于编译错误,无法使用format!({}):

error[E0277]: `params::Value` doesn't implement `std::fmt::Display`
`params::Value` cannot be formatted with the default formatter

尝试不同的字符串/数字转换,但失败,因为val1,val2不是字符串,而是params::Value。试图从cmd字符串中删除引号,但也失败了。有什么简单的解决办法吗?

Router的参数是URL模式中指定的参数,例如,如果您定义路由GET /:query,那么您将获得存储相应路径段的query参数。

通过Request::url访问的查询字符串。

相关内容

  • 没有找到相关文章

最新更新