scala – Play 2 – 在所有回复中设置标题?
发布时间:2020-12-16 09:33:08 所属栏目:安全 来源:网络整理
导读:我从 Setting HTTP headers in Play 2.0 (scala)?知道可以通过执行例如Ok(“hello”).Header(PRAGMA – “no-cache”)来逐个设置响应头。 如果您想在所有操作的响应中设置该标题或几个不同的标题,该怎么办?你不会想在任何地方重复使用。而且由于这更像一个
我从
Setting HTTP headers in Play 2.0 (scala)?知道可以通过执行例如Ok(“hello”).Header(PRAGMA – >“no-cache”)来逐个设置响应头。
如果您想在所有操作的响应中设置该标题或几个不同的标题,该怎么办?你不会想在任何地方重复使用。而且由于这更像一个应用程序范围的配置,您可能不希望Action作者必须使用其他语法来获取标题(例如OkWithHeaders(…)) 我现在是一个基本的Controller类,看起来像 class ContextController extends Controller { ... def Ok(h: Html) = Results.Ok(h).withHeaders(PRAGMA -> "no-cache") } 但这不是很正确。觉得应该有更多的AOP样式的方式定义默认标题并将它们添加到每个响应中。 解决方法
在您的Global.scala中,将每个呼叫都包含在一个动作中:
import play.api._ import play.api.mvc._ import play.api.Play.current import play.api.http.HeaderNames._ object Global extends GlobalSettings { def NoCache[A](action: Action[A]): Action[A] = Action(action.parser) { request => action(request) match { case s: SimpleResult[_] => s.withHeaders(PRAGMA -> "no-cache") case result => result } } override def onRouteRequest(request: RequestHeader): Option[Handler] = { if (Play.isDev) { super.onRouteRequest(request).map { case action: Action[_] => NoCache(action) case other => other } } else { super.onRouteRequest(request) } } } 在这种情况下,我只在dev模式下调用动作,这对非缓存指令是最有意义的。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |