sik*_*iki 5 playframework playframework-2.2
我正在使用Play 2.2.1并尝试覆盖GlobalSettings中的onRouteRequest函数.我在网上找到的所有示例都适用于Play 2.2.x之前,它们似乎不适用于2.2.x. 基本上想要在响应头中为所有响应设置一些自定义内容.
object Global extends GlobalSettings {
override def onRouteRequest(request: RequestHeader): Option[Handler] = {
super.onRouteRequest(request).map { handler =>
handler match {
case a: Action[_] => CustomAction(a)
case _ => handler
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是这不起作用,因为没有匹配Action [_].
非常感谢所有的帮助!
您需要匹配 aEssentialAction而不是Action。这是一个示例,展示了如何为 playframework 2.2 中的每个请求将“pragma”标头设置为“no-cache”
import play.api._\nimport play.api.mvc._\nimport play.api.Play.current\nimport play.api.http.HeaderNames._\n\nobject Global extends GlobalSettings {\n\n def NoCache(action: EssentialAction): EssentialAction = EssentialAction { request =>\n action(request).map(_.withHeaders(PRAGMA -> "no-cache"))\n }\n\n override def onRouteRequest(request: RequestHeader): Option[Handler] = {\n if (Play.isDev) {\n super.onRouteRequest(request).map { handler =>\n handler match {\n case a: EssentialAction => NoCache(a)\n case other => other\n }\n }\n } else {\n super.onRouteRequest(request)\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n该代码是从您所引用的问题移植而来的,该问题针对的是以前的 playframework 版本。
\n\n从 playframework 2.1 开始,您还可以使用doFilter代替onRouteRequest来实现相同的目的:
override def doFilter(action: EssentialAction) = EssentialAction { request =>\n if (Play.isDev) {\n action(request).map(_.withHeaders(\n PRAGMA -> "no-cache"\n ))\n } else {\n action(request) \n\xc2\xa0 }\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1506 次 |
| 最近记录: |