我有一个全局授权过滤器,覆盖了OnAuthorization
方法。
在调试时,我发现控制器类先实例化,然后再调用OnAuthorization
方法。
这是已知的行为吗?因为我在控制器构造函数中有一些代码,如果没有授权就不需要运行。
是否有任何方法可以解决这个问题?
我有一个全局授权过滤器,覆盖了OnAuthorization
方法。
在调试时,我发现控制器类先实例化,然后再调用OnAuthorization
方法。
这是已知的行为吗?因为我在控制器构造函数中有一些代码,如果没有授权就不需要运行。
是否有任何方法可以解决这个问题?
在应用于Action之前,将执行Action筛选器。如果您有全局授权筛选器,则表示它们已全局注册,您无需为每个操作添加这些筛选器,但这不会改变Action筛选器的行为,即在操作之前执行。
控制器首先初始化,然后调用相应的操作,因此您的授权筛选器将在控制器构造函数之后和操作之前执行。这是Action筛选器的设计行为。
如果要在控制器构造之前执行授权,请尝试通过继承DelegatingHandler
类创建用于授权的消息处理程序,而不是使用Action筛选器。