«Перенаправление» на внешний URL-адрес с помощью игровой платформы 2.7 - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь перенаправить на внешний URL с приложенным кодом авторизации. Я использую функцию «Redirect», доступную в игровой среде с использованием Scala. Но вместо перенаправления на предоставленный URL-адрес печатается сообщение «Ok», которое не перенаправляется

Я новичок в играх Play и Scala. Насколько я понимаю, «Действие» должно послать «Результат». Этот «результат» может быть «Ok» или «Redirect». В приведенном ниже коде: 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
}

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Вы можете попробовать следующее:

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")
}
}
0 голосов
/ 11 октября 2019

Я предполагаю, что это псевдокод, поскольку это сопоставление с образцом не является синтаксически правильным ...

Ваше сопоставление с образцом не является исчерпывающим. Например:

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 != 2 и false != 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")
    }
  }
}

Кроме того,

Этот «Результат» может быть либо «ОК», либо «Перенаправление». "

Это не правда;это не ограничено только двумя значениями. Это может быть ряд других вещей, таких как NoContent, Created, BadRequest, InternalServerError и т. Д. (В основном любой действительный статус HTTP).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...