簡體   English   中英

我可以在Play Framework 2中返回操作之前設置cookie嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM