我有一个覆盖OnAuthorization
方法的全局授权过滤器。
在调试时,我看到首先实例化控制器类,然后调用OnAuthorization
方法。
这是一个已知的行为,因为我在控制器构造函数中有一些代码,如果没有授权,则无需运行。
有什么方法可以解决这个问题吗?
答案 0 :(得分:5)
动作过滤器在应用它们的Action之前执行。如果你有全局授权过滤器,这意味着它们是全局注册的,你不必用这些过滤器来装饰每个动作,但这不会改变Action过滤器的行为,即在动作之前执行。
首先初始化控制器,然后调用相应的Actions,因此您的授权过滤器将在Controller的构造函数之后和操作之前执行。这是Action过滤器的行为,因为它们是这样设计的。
如果要在控制器构造之前执行授权,请尝试通过继承DelegatingHandler
类来创建用于授权的消息处理程序而不是Action过滤器。