在Axum中,可以通过在路由定义中使用/
字符和:
字符来指定路由参数。可以使用正则表达式来限制参数的类型和值。以下是一个示例代码,展示了如何定义一条路线具有多个排除的URL参数类型:
use axum::{prelude::*, Router};
use serde::Deserialize;
#[derive(Deserialize)]
struct RouteParams {
id: u32,
name: String,
}
async fn handler(params: extract::Path) -> String {
format!("id: {}, name: {}", params.id, params.name)
}
fn main() {
let app = Router::new().route(
"/users/:id/:name",
get(handler).exclude("name", "[0-9]+"),
);
axum::Server::bind(&"0.0.0.0:3000".parse().unwrap())
.serve(app.into_make_service())
.unwrap();
}
在上面的示例中,我们使用exclude
方法来排除URL参数name
的类型。在这个例子中,我们使用正则表达式[0-9]+
来限制name
参数只能是数字。这意味着如果在URL中提供的name
参数不是一个数字,将返回一个404错误。
注意,我们在RouteParams
结构体中使用了serde::Deserialize
属性来自动解析URL参数。
运行这个示例代码后,可以通过访问http://localhost:3000/users/1/123
来得到id: 1, name: 123
的响应。但是,如果访问http://localhost:3000/users/1/abc
,将会返回404错误,因为abc
不是一个数字。
这是一个简单的示例,展示了如何在Axum中定义一条路线具有多个排除的URL参数类型。你可以根据自己的需求修改和扩展这个示例。