【问题标题】:"Redirect" to an external URL using play framework 2.7使用播放框架 2.7“重定向”到外部 URL
【发布时间】:2019-10-14 14:15:52
【问题描述】:

我正在尝试重定向到附加了一些授权代码的外部 URL。我正在使用 Scala 的播放框架中提供的“重定向”功能。但不是重定向到提供的 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
}

【问题讨论】:

    标签: scala playframework


    【解决方案1】:

    我认为这是伪代码,因为模式匹配在语法上不正确...

    您的模式匹配并不详尽。例如:

    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")
        }
      }
    }
    

    还有,

    这个“结果”可以是“Ok”或“Redirect”

    这不是真的;它不仅限于两个值。它可以是许多其他的东西,例如NoContentCreatedBadRequestInternalServerError 等(基本上是任何有效的 HTTP 状态)。

    【讨论】:

      【解决方案2】:

      您可以尝试以下方法:

      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")
      }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多