[英]Can I set cookies before returning an action in Play Framework 2?
我知道我可以在返回動作時在Ok(...).withCookies(...)
設置cookie。 但是我想知道是否有辦法通過操縱request
對象來設置一些cookie。 這樣我就可以在我的模型中設置一些cookie,而我的控制器只需要將它們發回去。
我這樣做只是作為練習,並且還表明Play框架非常靈活,並且它在任何意義上都不會限制你。 我想出了如何純粹從Play源代碼中做到這一點,它非常干凈且易於閱讀。 這不是使用cookie或在Play中使用HttpRequest
對象的首選方式。 正如Jatin建議您將cookie解碼為正確的模型,將這些模型傳遞給您的服務,然后將服務結果轉換為play.api.mvc.Result,從而保持您的http和業務邏輯層分離。
這是代碼(您可以看到Headers
對象不打算以這種方式使用):
import play.api.http.HeaderNames.COOKIE
val cookies = Cookies(request.headers.get(COOKIE)).cookies
val myCookies = cookies + ("cookieName" -> Cookie("cookieName", "cookieValue"))
val headersMap = request.headers.toMap
val myHeaderMap = headersMap +
(COOKIE -> Seq(Cookies.encode(myCookies.values.toSeq)))
val myHeaders = new play.api.mvc.Headers {
val data:Seq[(String, Seq[String])] = myHeaderMap.toSeq
}
val modifiedRequest = request.copy(headers = myHeaders)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.