使用Actix Web Scope配置路由时持续返回404错误的问题
问题原因与解决方案
你的代码出现404的核心原因是:同一个service实例被重复注册时,Actix Web会跳过后续的重复注册操作。
你通过#[get("/")]宏把show_users包装成了带有固定路由规则的service,第一次调用.service(show_users)已经将它注册到根路径/下。当你尝试在/users scope里再次调用.service(show_users)时,Actix Web识别到这是同一个service实例,不会重复注册,所以/users路径下并没有实际绑定这个处理函数,自然返回404。
解决方法
改用route()方法绑定处理函数,每次都会创建新的路由规则,而非复用已注册的service:
#[get("/")] async fn show_users() -> HttpResponse { HttpResponse::Ok().finish() } #[actix_web::main] async fn main() -> std::io::Result<()> { HttpServer::new(|| { App::new() .service(show_users) // 保留根路径 / 的访问 .service( web::scope("/users") .route("/", web::get().to(show_users)) // 绑定 /users 路径到 show_users ) }) .bind(("127.0.0.1", 8080))? .run() .await }
这种方式既保留了根路径的访问,又能通过/users路径触发同一个处理函数,同时符合Scope功能的使用场景——后续可以给这个Scope统一添加中间件、数据共享等配置。
内容的提问来源于stack exchange,提问作者lucasfelber
相关产品推荐
相关产品推荐

