与其他人一起播放静态资源的路由问题

时间:2018-04-12 21:45:46

标签: playframework

我遇到的问题是游戏无法识别以下路线/assets/assets/id并返回{"error":{"code":404,"message":"The resource you requested could not be found","errors":["Resource not found by Assets controller"]}}如果我删除了/assets/*file,那么它适用于{{ 1}}和/assets。任何想法我做错了什么?

/assets/id

2 个答案:

答案 0 :(得分:0)

路由文件是关于顺序和模式(首先是文件中最高优先级)。

因此,在您的路由中,所有内容都与/assets/*file匹配。

GET /assets/:id也不是静态的,因为您可能会考虑另一条路线。

这是一个例子:

GET     /images/:id                   mypackage.AssetController.getDataId(id: Long)
GET     /assets/*file                       controllers.Assets.at(file)

或者,如果您想保留/assets/:id

GET     /assets/:id                   mypackage.AssetController.getDataId(id: Long)
GET     /assets/*file                       controllers.Assets.at(file)

在这里你必须意识到只有像/assets/images/img.png这样的东西才会被第二条路线匹配。 (只有一个斜杠,例如/assets/img.png将与第一条路线匹配。

答案 1 :(得分:0)

好的,所以我不知道你有3条/assets相关路线的意图。这里有两件事:

  1. 在视图模板中获取脚本和样式表文件(来自/assets/*file)需要一个线性路径定义(路径为/public)。这就是你所需要的!那么为什么你想要另外两条路线呢?您想要添加资产文件夹的其他内容是什么?

  2. 路线的顺序很重要,顺序是从上到下,直到匹配。例如,如果我有:

    GET /blog/:name                     controllers.Blog.get(name: String) 
    GET /blog/iwillNeverGetPickedUp     controllers.Blog.cantBeUsed
    
  3. 第二条路线永远不会被拾起;因为第一条路线首先匹配。也就是说,实际上是您使用路线创建的场景。在assets/:idassets/*file路线之间。