如何在 Play 中 return 具有 404 状态代码的资产?

How do I return assets with a 404 status code in Play?

目前我有一个使用 Scala 的播放应用程序,我在 public 文件夹中将前端作为 SPA。 我有一个 /404 路由,我想 return 状态代码为 404 的前端。 但是,如果我写:

def returnNotFound(): Action[AnyContent] = Action {
    NotFound(assets.at("index.html"))
}

然后我得到一个编译错误,因为资产 return 是一个动作,而不是一个可写的。 那么如何才能return public文件夹中的index.html状态码为404呢?

这里的问题是 assets.at("index.html") returns Action[AnyContent] 应该是 Controller 的 return 方法,因此为了改变状态你需要更改 assets.at 的结果,例如:

def returnNotFound(): Action[AnyContent] = Action.async { implicit request =>
    assets.at("index.html")(request).map { result =>
      new Result(result.header.copy(status = 404), result.body)
    }
}