从另一个控制器操作中检测请求是否为“ forward()”的正确方法是什么?

不同

我有几个“之前”类型的过滤器,仅当真正的,未转发的请求到达我的服务器时,才触发这些过滤器。并非如此,当我有时将请求转发到另一个控制器/动作以进行进一步处理时。

我的问题是,是否有一种简单的方法来检测由“ forward()”调用引起的这种特殊类型的请求?

或者,我正在考虑解析请求url,并检查控制器和动作是否与当前控制器/动作匹配,但是我不确定这是否行得通-并且这肯定是处理此问题的非常丑陋的方法...

在我的控制器操作中,我试图查看请求对象上是否有任何有用的属性,但找不到“ javax.servlet.forward.request_uri”和“ org.codehaus.groovy.grails”之外的任何有用属性。 .CONTROLLER_NAME_ATTRIBUTE“ +” org.codehaus.groovy.grails.ACTION_NAME_ATTRIBUTE“。但是,如果请求uri源自UrlMapping,则似乎无法将这些值相互比较(在这种情况下,它可能与控制器/操作不匹配)

埃里切尔格森

您可以通过查询servlet属性来确定是否转发了请求org.grails.FORWARD_CALLED

request.getAttribute('org.grails.FORWARD_CALLED')

最小示例(在Grails 3.3.9中,尽管在2.5.x中具有相同的属性):

def index() {
    forward action: 'fwd'
}

def fwd() {
    if (request.getAttribute('org.grails.FORWARD_CALLED')) {
        render 'was called by forward'
    } else {
        render 'called directly'
    }
}

调用端点:

$ curl localhost:8080/foo/index
was called by forward
$ curl localhost:8080/foo/fwd
called directly

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在另一个控制器的方法中调用一个控制器的方法

Laravel-一个控制器中另一个控制器的运行方法

在另一个控制器Ember中调用一个controllers方法

当来自另一个类的控制器调用方法产生无效操作时

控制器操作方法返回字符串或使用ajax post请求重定向到另一个操作

测试是否已在控制器中调用了另一个作用域的方法

如何在另一个视图控制器中调用另一个方法?

调用另一个控制器的方法

从同一控制器Angularjs中的另一个方法访问$ scope变量

从一个视图路由到另一个控制器的操作方法,并将参数传递给该控制器的构造函数

使用委托从模态视图控制器调用另一个视图控制器中的方法

为什么CakePHP无法为一个控制器创建固定装置,而为另一个控制器返回SQLSTATE [42000]?

从一个控制器调用方法到另一个控制器时,会话为空... MVC

从Rails中的另一个控制器调用方法

无法在 codeigniter 中调用另一个控制器方法

在另一个Rails中使用控制器中的方法

Laravel 5中另一个控制器的Access Controller方法

AngularJS:如何在另一个控制器中执行方法?

角度-从另一个控制器调用特定于控制器的功能的最佳实践是什么?

在另一个类的方法中调用类实例的正确方法是什么?

JavaFX从一个控制器向另一个控制器返回正确的数据

在Laravel中测试控制器的正确方法是什么?

ASP.NET Core-如何在另一个控制器中重用在一个控制器中创建的方法?

CodeIgniter-为什么无法从另一个控制器中的一个控制器访问会话集?

当我向控制器(RPC)添加另一个方法时,发现多个与请求匹配的动作

Codeigniter:将整个POST请求发送到另一个控制器的方法

JavaFX-如何在另一个控制器中的一个控制器中使用方法?

在Angular js中从一个控制器到另一个控制器的调用方法

如何在 AngularJs 1.7.x 中从一个控制器调用方法到另一个控制器,以刷新 UI 数据