You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 08:37:15