簡體   English   中英

使用播放框架 2.7 “重定向”到外部 URL

[英]“Redirect” to an external URL using play framework 2.7

我正在嘗試重定向到附加了一些授權代碼的外部 URL。 我正在使用 Scala 在游戲框架中使用“重定向”function。 但不是重定向到提供的 URL,而是打印“Ok”中的消息並且不重定向

我是 Play 和 Scala 的初學者。 我的理解是“動作”應該發送“結果”。 此“結果”可以是“確定”或“重定向”。 在下面的代碼中: 1)如果我沒有提到“Ok”,則會出現編譯錯誤 2)如果我執行下面的代碼,它不會被重定向,它只是在“Ok”中打印消息

// This is inside a controller
// it is defined as a GET in the routes file
def test = Action { implicit request =>
  async {
    await(userAuth.getAuth()) match{
      case Some(userAuth) if <>
        val url = <FunctionReturnsUrlwithcode>
        Redirect(url)
      case _ if flag
        val url = <FunctionReturnsUrlwithcode>
        Redirect(url)
    }
    Ok("Some message") // Without this , there is an error
}

我認為這是偽代碼,因為該模式匹配在語法上不正確......

您的模式匹配並不詳盡。 例如:

def test(): String = {
  val x = Some(1)

  x match {
    case Some(y) if y == 2 => return "matched 1"
    case _ if false == true => return "matched 2"
  }

  "matched nothing"
}

上面的代碼將返回"matched nothing" ,因為1 != 2false != true 需要有一個默認情況,否則如果不滿足任何指定條件,它將完全忽略模式匹配。

在您的情況下,我猜您的模式匹配中的任何一個條件都沒有得到滿足。 因此,模式匹配被跳過並返回Ok(whatever) - 如果您取出Ok ,您的應用程序將崩潰,因為Action必須返回Result 如果你這樣寫,你的代碼也會返回Ok

def test = Action { implicit request =>
  async {
    await(userAuth.getAuth()) match{
      case Some(userAuth) if <> =>
        val url = <FunctionReturnsUrlwithcode>
        Redirect(url)
      case _ if flag =>
        val url = <FunctionReturnsUrlwithcode>
        Redirect(url)
      case _ =>
        Ok("Some message")
    }
  }
}

還,

此“結果”可以是“確定”或“重定向”

這不是真的; 它不僅限於兩個值。 它可以是許多其他的東西,例如NoContentCreatedBadRequestInternalServerError等(基本上是任何有效的 HTTP 狀態)。

您可以嘗試以下方法:

def test: Action[AnyContent] = Action.async { implicit request =>
//your logic
async {
await(userAuth.getAuth()) match{
  case Some(userAuth) if <> =>
    val url = <FunctionReturnsUrlwithcode>
    (Redirect(url, Map("traceid"-> Set("trace")))
  case _ if flag =>
    val url = <FunctionReturnsUrlwithcode>
    (Redirect(url, Map("traceid"-> Set("trace")))
  case _ =>
    Ok("Some message")
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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