2015-04-24 125 views
0

我有一个非常简单的目的,形式的重新路由请求不发送重定向到客户端

的URI - >/random/*/*。例如/random/users转到/users

我不想用redirect()来解决问题。

我有一个尝试了一些方法,但不确定实现 -

  1. 拦截到达路由器之前的请求。以某种方式更改URI。我试图覆盖onRequest方法,但无法继续,因为我不知道实施。 (可能的问题是:路由确实在这里?)
  2. 在类似/random/*的路由中有一个条目,使它指向一个控制器方法。控制器内部再次使用修改后的URI调用路由器方法。这里又一次无法继续执行。
  3. 将路由文件加倍或在路由文件中放入正则表达式。对于每个条目,将其复制并附加/random。我不想这样做,因为它使文件难以管理。最后的手段真的。

请帮助就如何实现1点或2点 如果有任何其他更简单的方法,请帮助..

+0

您可以随时编写自定义路由器(相应地处理您的请求)。或者,您可以将呼叫转发到相应的控制器/功能,而不是使用重定向。我不得不说,这些解决方案看起来并不完美......我希望有人提出更好的解决方案。 – Peanut

+0

@Peanut转发到适当的控制器/功能是我想到的第2点。但在这里我需要从路由器获取一些数据。例如,对于'/ random/users',我需要找出哪个控制器/方法被调用'/ users'。我想要这个实现。 – hyades

+0

怎么样:'GET /随机/:控制器controllers.Random.handleRandom(控制器:字符串)' – Peanut

回答

0

添加新随机控制器,并创建转发到呼叫的动作适当的控制器。

使用以下路线:

GET /random/:controller controllers.Random.handleRandom(controller:String) 

handleRandom -action向前调用相应的(有或无重定向)。你可以做一些反射魔术来将呼叫转发给其他控制器,或者使用if-then-else或switch-clause。

+0

这听起来不太可行。如果路由文件中有100万条记录,我会在其中放置100万条else语句吗?(只是一个例子)。 'handleRandom'可能会聪明地做些事情。我正在寻找那件事。 – hyades

+0

“做一些反思 - 魔术”是指根据你传递的字符串选择正确的控制器类。 “if-then-else”解决方案适用于您有2或3种控制器类型的情况;-)另外,如果您有一百万个不同的条目,那么您可能应该考虑其他东西而不是静态路由器文件。 – Peanut

+0

这就是为什么我作为一个例子说。即使对于20个条目,我也不会考虑写20如果其他语句:) – hyades